PageRenderTime 55ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/htdocs/lithium/0.9.9/libraries/lithium/tests/cases/storage/CacheTest.php

http://github.com/pmjones/php-framework-benchmarks
PHP | 646 lines | 508 code | 132 blank | 6 comment | 6 complexity | 4ae7363d8baa3198b8a5e254d853d4db MD5 | raw file
Possible License(s): LGPL-3.0, Apache-2.0, BSD-3-Clause, ISC, AGPL-3.0, LGPL-2.1
  1. <?php
  2. /**
  3. * Lithium: the most rad php framework
  4. *
  5. * @copyright Copyright 2010, Union of RAD (http://union-of-rad.org)
  6. * @license http://opensource.org/licenses/bsd-license.php The BSD License
  7. */
  8. namespace lithium\tests\cases\storage;
  9. use \lithium\storage\Cache;
  10. use \lithium\util\Collection;
  11. use \SplFileInfo;
  12. class CacheTest extends \lithium\test\Unit {
  13. public function setUp() {
  14. Cache::reset();
  15. }
  16. public function tearDown() {
  17. Cache::reset();
  18. }
  19. public function testBasicCacheConfig() {
  20. $result = Cache::config();
  21. $this->assertFalse($result);
  22. $config = array('default' => array('adapter' => '\some\adapter', 'filters' => array()));
  23. $result = Cache::config($config);
  24. $this->assertNull($result);
  25. $expected = $config;
  26. $result = Cache::config();
  27. $this->assertEqual($expected, $result);
  28. $result = Cache::reset();
  29. $this->assertNull($result);
  30. $config = array('default' => array('adapter' => '\some\adapter', 'filters' => array()));
  31. Cache::config($config);
  32. $result = Cache::config();
  33. $expected = $config;
  34. $this->assertEqual($expected, $result);
  35. $result = Cache::reset();
  36. $this->assertNull($result);
  37. $config = array('default' => array(
  38. 'adapter' => '\some\adapter',
  39. 'filters' => array('Filter1', 'Filter2')
  40. ));
  41. Cache::config($config);
  42. $result = Cache::config();
  43. $expected = $config;
  44. $this->assertEqual($expected, $result);
  45. }
  46. public function testkeyNoContext() {
  47. $key = 'this is a cache key';
  48. $result = Cache::key($key);
  49. $expected = 'this is a cache key';
  50. $this->assertIdentical($expected, $result);
  51. $key = '1120-cache éë';
  52. $result = Cache::key($key);
  53. $expected = '1120-cache éë';
  54. $this->assertIdentical($expected, $result);
  55. }
  56. public function testKeyWithLambda() {
  57. $key = function() {
  58. return 'lambda_key';
  59. };
  60. $result = Cache::key($key);
  61. $expected = 'lambda_key';
  62. $this->assertIdentical($expected, $result);
  63. $key = function() {
  64. return 'lambda key';
  65. };
  66. $result = Cache::key($key);
  67. $expected = 'lambda key';
  68. $this->assertIdentical($expected, $result);
  69. $key = function($data = array()) {
  70. $defaults = array('foo' => 'foo', 'bar' => 'bar');
  71. $data += $defaults;
  72. return 'composed_key_with_' . $data['foo'] . '_' . $data['bar'];
  73. };
  74. $result = Cache::key($key, array('foo' => 'boo', 'bar' => 'far'));
  75. $expected = 'composed_key_with_boo_far';
  76. $this->assertIdentical($expected, $result);
  77. }
  78. public function testKeyWithClosure() {
  79. $value = 5;
  80. $key = function() use ($value) {
  81. return "closure key {$value}";
  82. };
  83. $result = Cache::key($key);
  84. $expected = 'closure key 5';
  85. $this->assertIdentical($expected, $result);
  86. $reference = 'mutable';
  87. $key = function () use (&$reference) {
  88. $reference .= ' key';
  89. return $reference;
  90. };
  91. $result = Cache::key($key);
  92. $expected = 'mutable key';
  93. $this->assertIdentical($expected, $result);
  94. $this->assertIdentical('mutable key', $reference);
  95. }
  96. public function testKeyWithClosureAndArguments() {
  97. $value = 'closure argument';
  98. $key = function($value) {
  99. return $value;
  100. };
  101. $result = Cache::key($key($value));
  102. $expected = 'closure argument';
  103. $this->assertIdentical($expected, $result);
  104. }
  105. public function testCacheWrite() {
  106. $config = array('default' => array(
  107. 'adapter' => 'Memory', 'filters' => array()
  108. ));
  109. Cache::config($config);
  110. $result = Cache::config();
  111. $expected = $config;
  112. $this->assertEqual($expected, $result);
  113. $result = Cache::write('default', 'some_key', 'some_data', '+1 minute');
  114. $this->assertTrue($result);
  115. $result = Cache::write('non_existing', 'key_value', 'data', '+1 minute');
  116. $this->assertFalse($result);
  117. }
  118. public function testCacheWriteMultipleItems() {
  119. $config = array('default' => array(
  120. 'adapter' => 'Memory', 'filters' => array(), 'strategies' => array()
  121. ));
  122. Cache::config($config);
  123. $result = Cache::config();
  124. $expected = $config;
  125. $this->assertEqual($expected, $result);
  126. $data = array(
  127. 'key1' => 'value1',
  128. 'key2' => 'value2',
  129. 'key3' => 'value3'
  130. );
  131. $result = Cache::write('default', $data, '+1 minute');
  132. $this->assertTrue($result);
  133. }
  134. public function testCacheReadMultipleItems() {
  135. $config = array('default' => array(
  136. 'adapter' => 'Memory', 'filters' => array(), 'strategies' => array()
  137. ));
  138. Cache::config($config);
  139. $result = Cache::config();
  140. $expected = $config;
  141. $this->assertEqual($expected, $result);
  142. $data = array(
  143. 'read1' => 'value1',
  144. 'read2' => 'value2',
  145. 'read3' => 'value3'
  146. );
  147. $result = Cache::write('default', $data, '+1 minute');
  148. $this->assertTrue($result);
  149. $keys = array_keys($data);
  150. $result = Cache::read('default', $keys);
  151. $this->assertEqual($data, $result);
  152. }
  153. public function testCacheReadWithConditions() {
  154. $config = array('default' => array(
  155. 'adapter' => 'Memory', 'filters' => array()
  156. ));
  157. Cache::config($config);
  158. $result = Cache::config();
  159. $expected = $config;
  160. $this->assertEqual($expected, $result);
  161. $conditions = function() {
  162. return false;
  163. };
  164. $result = Cache::read('default', 'some_key', compact('conditions'));
  165. $this->assertFalse($result);
  166. $conditions = function() use (&$config) {
  167. return (isset($config['default']));
  168. };
  169. Cache::write('default', 'some_key', 'some value', '+1 minute');
  170. $result = Cache::read('default', 'some_key', compact('conditions'));
  171. $this->assertTrue($result);
  172. $result = Cache::read('non_existing', 'key_value', compact('conditions'));
  173. $this->assertFalse($result);
  174. }
  175. public function testCacheIncrementDecrementWithConditions() {
  176. $config = array('default' => array(
  177. 'adapter' => 'Memory', 'filters' => array()
  178. ));
  179. Cache::config($config);
  180. $result = Cache::config();
  181. $expected = $config;
  182. $this->assertEqual($expected, $result);
  183. $conditions = function() {
  184. return false;
  185. };
  186. $result = Cache::increment('default', 'some_key', 1, compact('conditions'));
  187. $this->assertFalse($result);
  188. $conditions = function() use (&$config) {
  189. return (isset($config['default']));
  190. };
  191. Cache::write('default', 'some_key', 1, '+1 minute');
  192. $result = Cache::increment('default', 'some_key', 1, compact('conditions'));
  193. $this->assertEqual(2, $result);
  194. $conditions = function() {
  195. return false;
  196. };
  197. $result = Cache::decrement('default', 'decrement_some_key', 1, compact('conditions'));
  198. $this->assertFalse($result);
  199. $conditions = function() use (&$config) {
  200. return (isset($config['default']));
  201. };
  202. Cache::write('default', 'decrement_some_key', 1, '+1 minute');
  203. $result = Cache::decrement('default', 'decrement_some_key', 1, compact('conditions'));
  204. $this->assertEqual(0, $result);
  205. }
  206. public function testCacheWriteWithConditions() {
  207. $config = array('default' => array(
  208. 'adapter' => 'Memory', 'filters' => array()
  209. ));
  210. Cache::config($config);
  211. $result = Cache::config();
  212. $expected = $config;
  213. $this->assertEqual($expected, $result);
  214. $conditions = function() {
  215. return false;
  216. };
  217. $result = Cache::write(
  218. 'default', 'some_key', 'some_data', '+1 minute', compact('conditions')
  219. );
  220. $this->assertFalse($result);
  221. $conditions = function() use (&$config) {
  222. return (isset($config['default']));
  223. };
  224. $result = Cache::write(
  225. 'default', 'some_key', 'some_data', '+1 minute', compact('conditions')
  226. );
  227. $this->assertTrue($result);
  228. $result = Cache::write(
  229. 'non_existing', 'key_value', 'data', '+1 minute', compact('conditions')
  230. );
  231. $this->assertFalse($result);
  232. }
  233. public function testCacheReadThroughWrite() {
  234. $config = array('default' => array(
  235. 'adapter' => 'Memory', 'filters' => array()
  236. ));
  237. Cache::config($config);
  238. $result = Cache::config();
  239. $expected = $config;
  240. $this->assertEqual($expected, $result);
  241. $write = function() {
  242. return array('+1 minute' => 'read-through write');
  243. };
  244. $result = Cache::read('default', 'read_through', compact('write'));
  245. $this->assertEqual('read-through write', $result);
  246. $result = Cache::read('default', 'read_through');
  247. $this->assertEqual('read-through write', $result);
  248. $write = array('+1 minute' => 'string read-through write');
  249. $result = Cache::read('default', 'string_read_through', compact('write'));
  250. $this->assertEqual('string read-through write', $result);
  251. $result = Cache::read('default', 'string_read_through');
  252. $this->assertEqual('string read-through write', $result);
  253. }
  254. public function testCacheReadAndWrite() {
  255. $config = array('default' => array(
  256. 'adapter' => 'Memory', 'filters' => array()
  257. ));
  258. Cache::config($config);
  259. $result = Cache::config();
  260. $expected = $config;
  261. $this->assertEqual($expected, $result);
  262. $result = Cache::read('non_existing', 'key_value');
  263. $this->assertFalse($result);
  264. $result = Cache::write('default', 'keyed', 'some data', '+1 minute');
  265. $this->assertTrue($result);
  266. $result = Cache::read('default', 'keyed');
  267. $expected = 'some data';
  268. $this->assertEqual($expected, $result);
  269. $result = Cache::write('default', 'another', array('data' => 'take two'), '+1 minute');
  270. $this->assertTrue($result);
  271. $result = Cache::read('default', 'another');
  272. $expected = array('data' => 'take two');
  273. $this->assertEqual($expected, $result);
  274. $result = Cache::write(
  275. 'default', 'another', (object) array('data' => 'take two'), '+1 minute'
  276. );
  277. $this->assertTrue($result);
  278. $result = Cache::read('default', 'another');
  279. $expected = (object) array('data' => 'take two');
  280. $this->assertEqual($expected, $result);
  281. }
  282. public function testCacheReadAndWriteWithConditions() {
  283. $config = array('default' => array(
  284. 'adapter' => 'Memory', 'filters' => array()
  285. ));
  286. Cache::config($config);
  287. $result = Cache::config();
  288. $expected = $config;
  289. $this->assertEqual($expected, $result);
  290. $conditions = function() use (&$config) {
  291. return (isset($config['default']));
  292. };
  293. $result = Cache::read('non_existing', 'key_value', compact('conditions'));
  294. $this->assertFalse($result);
  295. $result = Cache::read('default', 'key_value', compact('conditions'));
  296. $this->assertFalse($result);
  297. $result = Cache::write('default', 'keyed', 'some data', '+1 minute', compact('conditions'));
  298. $this->assertTrue($result);
  299. $conditions = function() {
  300. return false;
  301. };
  302. $result = Cache::write('default', 'keyed', 'some data', '+1 minute', compact('conditions'));
  303. $this->assertFalse($result);
  304. }
  305. public function testCacheWriteAndDelete() {
  306. $config = array('default' => array(
  307. 'adapter' => 'Memory', 'filters' => array()
  308. ));
  309. Cache::config($config);
  310. $result = Cache::config();
  311. $expected = $config;
  312. $this->assertEqual($expected, $result);
  313. $result = Cache::delete('non_existing', 'key_value');
  314. $this->assertFalse($result);
  315. $result = Cache::write('default', 'to delete', 'dead data', '+1 minute');
  316. $this->assertTrue($result);
  317. $result = Cache::delete('default', 'to delete');
  318. $this->assertTrue($result);
  319. $this->assertFalse(Cache::read('default', 'to delete'));
  320. }
  321. public function testCacheWriteAndDeleteWithConditions() {
  322. $config = array('default' => array(
  323. 'adapter' => 'Memory', 'filters' => array()
  324. ));
  325. Cache::config($config);
  326. $result = Cache::config();
  327. $expected = $config;
  328. $this->assertEqual($expected, $result);
  329. $conditions = function() use (&$config) {
  330. return (isset($config['default']));
  331. };
  332. $result = Cache::delete('non_existing', 'key_value', compact('conditions'));
  333. $this->assertFalse($result);
  334. $result = Cache::write('default', 'to delete', 'dead data', '+1 minute');
  335. $this->assertTrue($result);
  336. $result = Cache::delete('default', 'to delete', array(
  337. 'conditions' => function() {
  338. return false;
  339. }
  340. ));
  341. $this->assertFalse($result);
  342. $result = Cache::delete('default', 'to delete', compact('conditions'));
  343. $this->assertTrue($result);
  344. }
  345. public function testCacheWriteAndClear() {
  346. $config = array('default' => array(
  347. 'adapter' => 'Memory', 'filters' => array()
  348. ));
  349. Cache::config($config);
  350. $result = Cache::config();
  351. $expected = $config;
  352. $this->assertEqual($expected, $result);
  353. $result = Cache::clear('non_existing');
  354. $this->assertFalse($result);
  355. $result = Cache::write('default', 'to delete', 'dead data', '+1 minute');
  356. $this->assertTrue($result);
  357. $result = Cache::clear('default');
  358. $this->assertTrue($result);
  359. $result = Cache::read('default', 'to delete');
  360. $this->assertFalse($result);
  361. }
  362. public function testClean() {
  363. $config = array('default' => array(
  364. 'adapter' => 'Memory', 'filters' => array()
  365. ));
  366. Cache::config($config);
  367. $result = Cache::config();
  368. $expected = $config;
  369. $this->assertEqual($expected, $result);
  370. $result = Cache::clean('non_existing');
  371. $this->assertFalse($result);
  372. $result = Cache::clean('default');
  373. $this->assertFalse($result);
  374. }
  375. public function testReset() {
  376. $config = array('default' => array(
  377. 'adapter' => 'Memory', 'filters' => array()
  378. ));
  379. Cache::config($config);
  380. $result = Cache::config();
  381. $expected = $config;
  382. $this->assertEqual($expected, $result);
  383. $result = Cache::reset();
  384. $this->assertNull($result);
  385. $result = Cache::config();
  386. $this->assertFalse($result);
  387. }
  388. public function testIncrement() {
  389. $config = array('default' => array(
  390. 'adapter' => 'Memory', 'filters' => array()
  391. ));
  392. Cache::config($config);
  393. $result = Cache::config();
  394. $expected = $config;
  395. $this->assertEqual($expected, $result);
  396. $result = Cache::increment('does_not_exist', 'inc');
  397. $this->assertFalse($result);
  398. $result = Cache::write('default', 'increment', 5, '+1 minute');
  399. $this->assertTrue($result);
  400. $result = Cache::increment('default', 'increment');
  401. $this->assertTrue($result);
  402. $result = Cache::read('default', 'increment');
  403. $this->assertEqual(6, $result);
  404. }
  405. public function testDecrement() {
  406. $config = array('default' => array(
  407. 'adapter' => 'Memory', 'filters' => array()
  408. ));
  409. Cache::config($config);
  410. $result = Cache::config();
  411. $expected = $config;
  412. $this->assertEqual($expected, $result);
  413. $result = Cache::decrement('does_not_exist', 'dec');
  414. $this->assertFalse($result);
  415. $result = Cache::write('default', 'decrement', 5, '+1 minute');
  416. $this->assertTrue($result);
  417. $result = Cache::decrement('default', 'decrement');
  418. $this->assertTrue($result);
  419. $result = Cache::read('default', 'decrement');
  420. $this->assertEqual(4, $result);
  421. }
  422. public function testNonPortableCacheAdapterMethod() {
  423. $config = array('default' => array(
  424. 'adapter' => 'Memory', 'filters' => array()
  425. ));
  426. Cache::config($config);
  427. $result = Cache::config();
  428. $expected = $config;
  429. $this->assertEqual($expected, $result);
  430. }
  431. public function testIntegrationFileAdapterCacheConfig() {
  432. $result = Cache::config();
  433. $this->assertFalse($result);
  434. $config = array('default' => array(
  435. 'adapter' => 'File', 'filters' => array()
  436. ));
  437. Cache::config($config);
  438. $result = Cache::config();
  439. $expected = $config;
  440. $this->assertEqual($expected, $result);
  441. }
  442. public function testIntegrationFileAdapterWrite() {
  443. $directory = new SplFileInfo(LITHIUM_APP_PATH . "/resources/tmp/cache/");
  444. $accessible = ($directory->isDir() && $directory->isReadable() && $directory->isWritable());
  445. $message = "$directory does not have the proper permissions.";
  446. $this->skipIf(!$accessible, $message);
  447. $config = array('default' => array(
  448. 'adapter' => 'File',
  449. 'path' => LITHIUM_APP_PATH . '/resources/tmp/cache',
  450. 'filters' => array()
  451. ));
  452. Cache::config($config);
  453. $result = Cache::write('default', 'key', 'value', '+1 minute');
  454. $this->assertTrue($result);
  455. $time = time() + 60;
  456. $result = file_get_contents(LITHIUM_APP_PATH . '/resources/tmp/cache/key');
  457. $expected = "{:expiry:$time}\nvalue";
  458. $this->assertEqual($result, $expected);
  459. $result = unlink(LITHIUM_APP_PATH . '/resources/tmp/cache/key');
  460. $this->assertTrue($result);
  461. $this->assertFalse(file_exists(LITHIUM_APP_PATH . '/resources/tmp/cache/key'));
  462. }
  463. public function testIntegrationFileAdapterWithStrategies() {
  464. $directory = new SplFileInfo(LITHIUM_APP_PATH . "/resources/tmp/cache/");
  465. $accessible = ($directory->isDir() && $directory->isReadable() && $directory->isWritable());
  466. $message = "$directory does not have the proper permissions.";
  467. $this->skipIf(!$accessible, $message);
  468. $config = array('default' => array(
  469. 'adapter' => 'File',
  470. 'path' => LITHIUM_APP_PATH . '/resources/tmp/cache',
  471. 'filters' => array(),
  472. 'strategies' => array('Serializer')
  473. ));
  474. Cache::config($config);
  475. $data = array('some' => 'data');
  476. $result = Cache::write('default', 'key', $data, '+1 minute');
  477. $this->assertTrue($result);
  478. $time = time() + 60;
  479. $result = file_get_contents(LITHIUM_APP_PATH . '/resources/tmp/cache/key');
  480. $expected = "{:expiry:$time}\na:1:{s:4:\"some\";s:4:\"data\";}";
  481. $this->assertEqual($result, $expected);
  482. $result = Cache::read('default', 'key');
  483. $this->assertEqual($data, $result);
  484. $result = unlink(LITHIUM_APP_PATH . '/resources/tmp/cache/key');
  485. $this->assertTrue($result);
  486. $this->assertFalse(file_exists(LITHIUM_APP_PATH . '/resources/tmp/cache/key'));
  487. }
  488. public function testIntegrationFileAdapterMultipleStrategies() {
  489. $directory = new SplFileInfo(LITHIUM_APP_PATH . "/resources/tmp/cache/");
  490. $accessible = ($directory->isDir() && $directory->isReadable() && $directory->isWritable());
  491. $message = "$directory does not have the proper permissions.";
  492. $this->skipIf(!$accessible, $message);
  493. $config = array('default' => array(
  494. 'adapter' => 'File',
  495. 'path' => LITHIUM_APP_PATH . '/resources/tmp/cache',
  496. 'filters' => array(),
  497. 'strategies' => array('Serializer', 'Base64')
  498. ));
  499. Cache::config($config);
  500. $data = array('some' => 'data');
  501. $result = Cache::write('default', 'key', $data, '+1 minute');
  502. $this->assertTrue($result);
  503. $time = time() + 60;
  504. $result = file_get_contents(LITHIUM_APP_PATH . '/resources/tmp/cache/key');
  505. $expected = "{:expiry:$time}\nYToxOntzOjQ6InNvbWUiO3M6NDoiZGF0YSI7fQ==";
  506. $this->assertEqual($result, $expected);
  507. $result = Cache::read('default', 'key');
  508. $this->assertEqual($data, $result);
  509. $result = unlink(LITHIUM_APP_PATH . '/resources/tmp/cache/key');
  510. $this->assertTrue($result);
  511. $this->assertFalse(file_exists(LITHIUM_APP_PATH . '/resources/tmp/cache/key'));
  512. }
  513. }
  514. ?>