3 namespace Drupal\KernelTests\Core\Config\Storage;
5 use Drupal\Core\Config\FileStorage;
6 use Drupal\Core\Config\CachedStorage;
7 use Drupal\Core\DependencyInjection\ContainerBuilder;
8 use Drupal\Core\StreamWrapper\PublicStream;
9 use Symfony\Component\DependencyInjection\Reference;
12 * Tests CachedStorage operations.
16 class CachedStorageTest extends ConfigStorageTestBase {
19 * The cache backend the cached storage is using.
21 * @var \Drupal\Core\Cache\CacheBackendInterface
26 * The file storage the cached storage is using.
28 * @var \Drupal\Core\Config\FileStorage
30 protected $fileStorage;
32 protected function setUp() {
34 // Create a directory.
35 $dir = PublicStream::basePath() . '/config';
36 $this->fileStorage = new FileStorage($dir);
37 $this->storage = new CachedStorage($this->fileStorage, \Drupal::service('cache.config'));
38 $this->cache = \Drupal::service('cache_factory')->get('config');
39 // ::listAll() verifications require other configuration data to exist.
40 $this->storage->write('system.performance', []);
46 public function testInvalidStorage() {
47 // No-op as this test does not make sense.
53 protected function read($name) {
54 $data = $this->cache->get($name);
55 // Cache misses fall through to the underlying storage.
56 return $data ? $data->data : $this->fileStorage->read($name);
62 protected function insert($name, $data) {
63 $this->fileStorage->write($name, $data);
64 $this->cache->set($name, $data);
70 protected function update($name, $data) {
71 $this->fileStorage->write($name, $data);
72 $this->cache->set($name, $data);
78 protected function delete($name) {
79 $this->cache->delete($name);
80 unlink($this->fileStorage->getFilePath($name));
86 public function containerBuild(ContainerBuilder $container) {
87 parent::containerBuild($container);
88 // Use the regular database cache backend to aid testing.
89 $container->register('cache_factory', 'Drupal\Core\Cache\DatabaseBackendFactory')
90 ->addArgument(new Reference('database'))
91 ->addArgument(new Reference('cache_tags.invalidator.checksum'));