View source
<?php
namespace Drupal\KernelTests\Core\KeyValueStore;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\KeyValueStore\KeyValueFactory;
class DatabaseStorageExpirableTest extends StorageTestBase {
protected static $modules = [
'system',
];
protected function setUp() : void {
parent::setUp();
$this->factory = 'keyvalue.expirable';
}
public function register(ContainerBuilder $container) {
parent::register($container);
$parameter[KeyValueFactory::DEFAULT_SETTING] = 'keyvalue.expirable.database';
$container
->setParameter('factory.keyvalue.expirable', $parameter);
}
public function testCRUDWithExpiration() {
$stores = $this
->createStorage();
$stores[0]
->setWithExpire('foo', $this->objects[0], rand(500, 100000));
$this
->assertEquals($this->objects[0], $stores[0]
->get('foo'));
$this
->assertNull($stores[1]
->get('foo'));
$stores[0]
->setWithExpire('foo', $this->objects[1], rand(500, 100000));
$this
->assertEquals($this->objects[1], $stores[0]
->get('foo'));
$this
->assertNull($stores[1]
->get('foo'));
$stores[1]
->setWithExpire('foo', $this->objects[2], rand(500, 100000));
$this
->assertEquals($this->objects[1], $stores[0]
->get('foo'));
$this
->assertEquals($this->objects[2], $stores[1]
->get('foo'));
$values = [
'foo' => $this->objects[3],
'bar' => $this->objects[4],
];
$stores[0]
->setMultipleWithExpire($values, rand(500, 100000));
$result = $stores[0]
->getMultiple([
'foo',
'bar',
]);
foreach ($values as $j => $value) {
$this
->assertEquals($value, $result[$j]);
}
$this
->assertEquals($this->objects[2], $stores[1]
->get('foo'));
$this
->assertNull($stores[1]
->get('bar'));
$stores[1]
->set('foo', $this->objects[5]);
$this
->assertEquals($values, $stores[0]
->getAll());
$result = $stores[1]
->getAll();
$this
->assertEquals([
'foo' => $this->objects[5],
], $result);
$stores[0]
->deleteMultiple(array_keys($values));
$this
->assertNull($stores[0]
->get('foo'));
$this
->assertNull($stores[0]
->get('bar'));
$this
->assertEmpty($stores[0]
->getMultiple([
'foo',
'bar',
]));
$this
->assertEquals($this->objects[5], $stores[1]
->get('foo'));
$key = $this
->randomMachineName();
for ($i = 0; $i <= 1; $i++) {
$this
->assertEquals(!$i, $stores[0]
->setWithExpireIfNotExists($key, $this->objects[$i], rand(500, 100000)));
$this
->assertEquals($this->objects[0], $stores[0]
->get($key));
$this
->assertNull($stores[1]
->get($key));
}
$stores[0]
->delete($key);
$stores[0]
->setWithExpireIfNotExists($key, $this->objects[1], rand(500, 100000));
$this
->assertEquals($this->objects[1], $stores[0]
->get($key));
$this
->assertNull($stores[1]
->get($key));
}
public function testExpiration() {
$stores = $this
->createStorage();
$day = 604800;
$stores[0]
->setWithExpire('yesterday', 'all my troubles seemed so far away', -1 * $day);
$stores[0]
->set('troubles', 'here to stay');
$this
->assertFalse($stores[0]
->has('yesterday'));
$this
->assertNull($stores[0]
->get('yesterday'));
$this
->assertTrue($stores[0]
->has('troubles'));
$this
->assertSame('here to stay', $stores[0]
->get('troubles'));
$this
->assertCount(1, $stores[0]
->getMultiple([
'yesterday',
'troubles',
]));
$stores[0]
->setWithExpire($this
->randomMachineName(), $this->objects[0], -7 * $day);
$stores[0]
->setWithExpireIfNotExists($this
->randomMachineName(), $this->objects[1], -5 * $day);
$stores[0]
->setMultipleWithExpire([
$this
->randomMachineName() => $this->objects[2],
$this
->randomMachineName() => $this->objects[3],
], -3 * $day);
$stores[0]
->setWithExpireIfNotExists('yesterday', "you'd forgiven me", -1 * $day);
$stores[0]
->setWithExpire('still', "'til we say we're sorry", 2 * $day);
$all = $stores[0]
->getAll();
$this
->assertCount(2, $all);
foreach ([
'troubles',
'still',
] as $key) {
$this
->assertTrue(!empty($all[$key]));
}
$this
->assertNull($stores[0]
->get('yesterday'));
$stores[0]
->setWithExpireIfNotExists('yesterday', 'Oh, yesterday came suddenly', $day);
$this
->assertSame('Oh, yesterday came suddenly', $stores[0]
->get('yesterday'));
}
}