* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Cache\Tests\Simple; use Cache\IntegrationTests\SimpleCacheTest; use Psr\SimpleCache\CacheInterface; use Symfony\Component\Cache\PruneableInterface; abstract class CacheTestCase extends SimpleCacheTest { protected function setUp() { parent::setUp(); if (!array_key_exists('testPrune', $this->skippedTests) && !$this->createSimpleCache() instanceof PruneableInterface) { $this->skippedTests['testPrune'] = 'Not a pruneable cache pool.'; } } public static function validKeys() { if (defined('HHVM_VERSION')) { return parent::validKeys(); } return array_merge(parent::validKeys(), array(array("a\0b"))); } public function testDefaultLifeTime() { if (isset($this->skippedTests[__FUNCTION__])) { $this->markTestSkipped($this->skippedTests[__FUNCTION__]); } $cache = $this->createSimpleCache(2); $cache->set('key.dlt', 'value'); sleep(1); $this->assertSame('value', $cache->get('key.dlt')); sleep(2); $this->assertNull($cache->get('key.dlt')); } public function testNotUnserializable() { if (isset($this->skippedTests[__FUNCTION__])) { $this->markTestSkipped($this->skippedTests[__FUNCTION__]); } $cache = $this->createSimpleCache(); $cache->set('foo', new NotUnserializable()); $this->assertNull($cache->get('foo')); $cache->setMultiple(array('foo' => new NotUnserializable())); foreach ($cache->getMultiple(array('foo')) as $value) { } $this->assertNull($value); } public function testPrune() { if (isset($this->skippedTests[__FUNCTION__])) { $this->markTestSkipped($this->skippedTests[__FUNCTION__]); } if (!method_exists($this, 'isPruned')) { $this->fail('Test classes for pruneable caches must implement `isPruned($cache, $name)` method.'); } /** @var PruneableInterface|CacheInterface $cache */ $cache = $this->createSimpleCache(); $cache->set('foo', 'foo-val', new \DateInterval('PT05S')); $cache->set('bar', 'bar-val', new \DateInterval('PT10S')); $cache->set('baz', 'baz-val', new \DateInterval('PT15S')); $cache->set('qux', 'qux-val', new \DateInterval('PT20S')); sleep(30); $cache->prune(); $this->assertTrue($this->isPruned($cache, 'foo')); $this->assertTrue($this->isPruned($cache, 'bar')); $this->assertTrue($this->isPruned($cache, 'baz')); $this->assertTrue($this->isPruned($cache, 'qux')); $cache->set('foo', 'foo-val'); $cache->set('bar', 'bar-val', new \DateInterval('PT20S')); $cache->set('baz', 'baz-val', new \DateInterval('PT40S')); $cache->set('qux', 'qux-val', new \DateInterval('PT80S')); $cache->prune(); $this->assertFalse($this->isPruned($cache, 'foo')); $this->assertFalse($this->isPruned($cache, 'bar')); $this->assertFalse($this->isPruned($cache, 'baz')); $this->assertFalse($this->isPruned($cache, 'qux')); sleep(30); $cache->prune(); $this->assertFalse($this->isPruned($cache, 'foo')); $this->assertTrue($this->isPruned($cache, 'bar')); $this->assertFalse($this->isPruned($cache, 'baz')); $this->assertFalse($this->isPruned($cache, 'qux')); sleep(30); $cache->prune(); $this->assertFalse($this->isPruned($cache, 'foo')); $this->assertTrue($this->isPruned($cache, 'baz')); $this->assertFalse($this->isPruned($cache, 'qux')); sleep(30); $cache->prune(); $this->assertFalse($this->isPruned($cache, 'foo')); $this->assertTrue($this->isPruned($cache, 'qux')); } } class NotUnserializable implements \Serializable { public function serialize() { return serialize(123); } public function unserialize($ser) { throw new \Exception(__CLASS__); } } __halt_compiler();----SIGNATURE:----kEWHI1SeZjRgUsTlfimj714iOBsGLkg/Fkc2ALPA8+6odrkEDBeIp7r8YxYHzc1xfJF3uN7Iu/T9k5g+AhQ08aX6xFGrAAZvBJGasQJMn006ByEOgnQzmwOirHnGQllADqRAX1gm3AKXzIYdXv8ZDBSZ/vaEAW0H8yR8/5Fvet4SGKUS3IkOksn2yF2ly7492AzQCuFHHONTKj327r5k9QKYF9ZyQbdR3G7LtZNT1n2A8a0gIEGT8v1iK/Eg+/l2TkgFcndC7YTfBuRKsdeog22Ci8UrLQrUfViryLyT/8FpFOyUcXzi5FsmCWb73a4Zf0wHJ1qwL2t9fns2T5GVF2fQ7WVDRxkvhiBy4wbA0iJySX2Y9k5rzVs1Q0H/E7Q95iPUOjj0CnR+QF4qus9FjsDQkeHKdjy2DDiejJCNNpGQOTgI0/e6AlUzRtvW1urbRjZprLyAeLhz1Uj7SJyleNsIotVlxvKZ6o8Zyqh4FAMCW9s1/Nm4Y+FmyAIXwYGmg+9ZS+VtIlqBAIHITdB/oehfgYVbafZ5rk94A7tBA9rRLL+kJDsb2szw4MdsC732RbDxDbGbSQDDqMVWGscylYUlJukih3mjrqcFiKXnz+llDKTMBgROKHUG1uokNCVrcWSrScHeo6ZvxEzkTEh3shHt/fLA8GFxMd1kfaFnSbE=----ATTACHMENT:----MTU1MTQzMzQxNDM2NzUxMyA5ODI3NjQ3MDIyNDU2NTE5IDMyNTYwOTIzMTc0MTcwNjM=