summaryrefslogtreecommitdiff
path: root/vendor/symfony/cache/Tests/Psr16CacheTest.php
diff options
context:
space:
mode:
authorGreg Roach <fisharebest@webtrees.net>2019-06-03 14:19:10 +0100
committerGreg Roach <fisharebest@webtrees.net>2019-06-03 14:19:10 +0100
commit69c8d4f5c90cef75da102f92e4e992d03a8f1cd8 (patch)
tree4f956848961891482b64ee2cd5c8d7290936e354 /vendor/symfony/cache/Tests/Psr16CacheTest.php
parent425f99bc29ab9e477e5407b5c86da5c85ba47461 (diff)
downloadwebtrees-69c8d4f5c90cef75da102f92e4e992d03a8f1cd8.tar.gz
webtrees-69c8d4f5c90cef75da102f92e4e992d03a8f1cd8.tar.bz2
webtrees-69c8d4f5c90cef75da102f92e4e992d03a8f1cd8.zip
:Update vendor dependencies
Diffstat (limited to 'vendor/symfony/cache/Tests/Psr16CacheTest.php')
-rw-r--r--vendor/symfony/cache/Tests/Psr16CacheTest.php168
1 files changed, 168 insertions, 0 deletions
diff --git a/vendor/symfony/cache/Tests/Psr16CacheTest.php b/vendor/symfony/cache/Tests/Psr16CacheTest.php
new file mode 100644
index 0000000000..e56d99e441
--- /dev/null
+++ b/vendor/symfony/cache/Tests/Psr16CacheTest.php
@@ -0,0 +1,168 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Cache\Tests;
+
+use Cache\IntegrationTests\SimpleCacheTest;
+use Symfony\Component\Cache\Adapter\FilesystemAdapter;
+use Symfony\Component\Cache\PruneableInterface;
+use Symfony\Component\Cache\Psr16Cache;
+
+/**
+ * @group time-sensitive
+ */
+class Psr16CacheTest extends SimpleCacheTest
+{
+ protected function setUp()
+ {
+ parent::setUp();
+
+ if (\array_key_exists('testPrune', $this->skippedTests)) {
+ return;
+ }
+
+ $pool = $this->createSimpleCache();
+ if ($pool instanceof Psr16Cache) {
+ $pool = ((array) $pool)[sprintf("\0%s\0pool", Psr16Cache::class)];
+ }
+
+ if (!$pool instanceof PruneableInterface) {
+ $this->skippedTests['testPrune'] = 'Not a pruneable cache pool.';
+ }
+ }
+
+ public function createSimpleCache($defaultLifetime = 0)
+ {
+ return new Psr16Cache(new FilesystemAdapter('', $defaultLifetime));
+ }
+
+ public static function validKeys()
+ {
+ return array_merge(parent::validKeys(), [["a\0b"]]);
+ }
+
+ public function testDefaultLifeTime()
+ {
+ if (isset($this->skippedTests[__FUNCTION__])) {
+ $this->markTestSkipped($this->skippedTests[__FUNCTION__]);
+ }
+
+ $cache = $this->createSimpleCache(2);
+ $cache->clear();
+
+ $cache->set('key.dlt', 'value');
+ sleep(1);
+
+ $this->assertSame('value', $cache->get('key.dlt'));
+
+ sleep(2);
+ $this->assertNull($cache->get('key.dlt'));
+
+ $cache->clear();
+ }
+
+ public function testNotUnserializable()
+ {
+ if (isset($this->skippedTests[__FUNCTION__])) {
+ $this->markTestSkipped($this->skippedTests[__FUNCTION__]);
+ }
+
+ $cache = $this->createSimpleCache();
+ $cache->clear();
+
+ $cache->set('foo', new NotUnserializable());
+
+ $this->assertNull($cache->get('foo'));
+
+ $cache->setMultiple(['foo' => new NotUnserializable()]);
+
+ foreach ($cache->getMultiple(['foo']) as $value) {
+ }
+ $this->assertNull($value);
+
+ $cache->clear();
+ }
+
+ public function testPrune()
+ {
+ if (isset($this->skippedTests[__FUNCTION__])) {
+ $this->markTestSkipped($this->skippedTests[__FUNCTION__]);
+ }
+
+ /** @var PruneableInterface|CacheInterface $cache */
+ $cache = $this->createSimpleCache();
+ $cache->clear();
+
+ $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'));
+
+ $cache->clear();
+ }
+
+ protected function isPruned($cache, $name)
+ {
+ if (Psr16Cache::class !== \get_class($cache)) {
+ $this->fail('Test classes for pruneable caches must implement `isPruned($cache, $name)` method.');
+ }
+
+ $pool = ((array) $cache)[sprintf("\0%s\0pool", Psr16Cache::class)];
+ $getFileMethod = (new \ReflectionObject($pool))->getMethod('getFile');
+ $getFileMethod->setAccessible(true);
+
+ return !file_exists($getFileMethod->invoke($pool, $name));
+ }
+}
+
+class NotUnserializable
+{
+ public function __wakeup()
+ {
+ throw new \Exception(__CLASS__);
+ }
+}