View source
<?php
namespace Drupal\system\Tests\KeyValueStore;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\KeyValueStore\KeyValueFactory;
class DatabaseStorageExpirableTest extends StorageTestBase {
public static $modules = array(
'system',
);
protected function setUp() {
parent::setUp();
$this->factory = 'keyvalue.expirable';
$this
->installSchema('system', array(
'key_value_expire',
));
}
public function containerBuild(ContainerBuilder $container) {
parent::containerBuild($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
->assertIdenticalObject($this->objects[0], $stores[0]
->get('foo'));
$this
->assertFalse($stores[1]
->get('foo'));
$stores[0]
->setWithExpire('foo', $this->objects[1], rand(500, 100000));
$this
->assertIdenticalObject($this->objects[1], $stores[0]
->get('foo'));
$this
->assertFalse($stores[1]
->get('foo'));
$stores[1]
->setWithExpire('foo', $this->objects[2], rand(500, 100000));
$this
->assertIdenticalObject($this->objects[1], $stores[0]
->get('foo'));
$this
->assertIdenticalObject($this->objects[2], $stores[1]
->get('foo'));
$values = array(
'foo' => $this->objects[3],
'bar' => $this->objects[4],
);
$stores[0]
->setMultipleWithExpire($values, rand(500, 100000));
$result = $stores[0]
->getMultiple(array(
'foo',
'bar',
));
foreach ($values as $j => $value) {
$this
->assertIdenticalObject($value, $result[$j]);
}
$this
->assertIdenticalObject($stores[1]
->get('foo'), $this->objects[2]);
$this
->assertFalse($stores[1]
->get('bar'));
$stores[1]
->set('foo', $this->objects[5]);
$result = $stores[0]
->getAll();
$this
->assertEqual(count($result), count($values));
foreach ($result as $key => $value) {
$this
->assertEqual($values[$key], $value);
}
$result = $stores[1]
->getAll();
$this
->assertEqual($result, array(
'foo' => $this->objects[5],
));
$stores[0]
->deleteMultiple(array_keys($values));
$this
->assertFalse($stores[0]
->get('foo'));
$this
->assertFalse($stores[0]
->get('bar'));
$this
->assertFalse($stores[0]
->getMultiple(array(
'foo',
'bar',
)));
$this
->assertIdenticalObject($this->objects[5], $stores[1]
->get('foo'));
$key = $this
->randomMachineName();
for ($i = 0; $i <= 1; $i++) {
$this
->assertEqual(!$i, $stores[0]
->setWithExpireIfNotExists($key, $this->objects[$i], rand(500, 100000)));
$this
->assertIdenticalObject($this->objects[0], $stores[0]
->get($key));
$this
->assertFalse($stores[1]
->get($key));
}
$stores[0]
->delete($key);
$stores[0]
->setWithExpireIfNotExists($key, $this->objects[1], rand(500, 100000));
$this
->assertIdenticalObject($this->objects[1], $stores[0]
->get($key));
$this
->assertFalse($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
->assertFalse($stores[0]
->get('yesterday'));
$this
->assertTrue($stores[0]
->has('troubles'));
$this
->assertIdentical($stores[0]
->get('troubles'), 'here to stay');
$this
->assertIdentical(count($stores[0]
->getMultiple(array(
'yesterday',
'troubles',
))), 1);
$stores[0]
->setWithExpire($this
->randomMachineName(), $this->objects[0], -7 * $day);
$stores[0]
->setWithExpireIfNotExists($this
->randomMachineName(), $this->objects[1], -5 * $day);
$stores[0]
->setMultipleWithExpire(array(
$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
->assertIdentical(count($all), 2);
foreach (array(
'troubles',
'still',
) as $key) {
$this
->assertTrue(!empty($all[$key]));
}
}
}