function GenericCacheBackendUnitTestBase::testInvalidateTags
Same name in other branches
- 9 core/tests/Drupal/KernelTests/Core/Cache/GenericCacheBackendUnitTestBase.php \Drupal\KernelTests\Core\Cache\GenericCacheBackendUnitTestBase::testInvalidateTags()
- 8.9.x core/modules/system/src/Tests/Cache/GenericCacheBackendUnitTestBase.php \Drupal\system\Tests\Cache\GenericCacheBackendUnitTestBase::testInvalidateTags()
- 8.9.x core/tests/Drupal/KernelTests/Core/Cache/GenericCacheBackendUnitTestBase.php \Drupal\KernelTests\Core\Cache\GenericCacheBackendUnitTestBase::testInvalidateTags()
- 10 core/tests/Drupal/KernelTests/Core/Cache/GenericCacheBackendUnitTestBase.php \Drupal\KernelTests\Core\Cache\GenericCacheBackendUnitTestBase::testInvalidateTags()
Tests Drupal\Core\Cache\CacheBackendInterface::invalidateTags().
File
-
core/
tests/ Drupal/ KernelTests/ Core/ Cache/ GenericCacheBackendUnitTestBase.php, line 573
Class
- GenericCacheBackendUnitTestBase
- Tests any cache backend.
Namespace
Drupal\KernelTests\Core\CacheCode
public function testInvalidateTags() : void {
$backend = $this->getCacheBackend();
// Create two cache entries with the same tag and tag value.
$backend->set('test_cid_invalidate1', $this->defaultValue, Cache::PERMANENT, [
'test_tag:2',
]);
$backend->set('test_cid_invalidate2', $this->defaultValue, Cache::PERMANENT, [
'test_tag:2',
]);
$this->assertSame($this->defaultValue, $backend->get('test_cid_invalidate1')->data);
$this->assertSame($this->defaultValue, $backend->get('test_cid_invalidate2')->data);
// Invalidate test_tag of value 1. This should invalidate both entries.
Cache::invalidateTags([
'test_tag:2',
]);
$this->assertFalse($backend->get('test_cid_invalidate1') || $backend->get('test_cid_invalidate2'), 'Two cache items invalidated after invalidating a cache tag.');
// Verify that cache items have not been deleted after invalidation.
$this->assertSame($this->defaultValue, $backend->get('test_cid_invalidate1', TRUE)->data);
$this->assertSame($this->defaultValue, $backend->get('test_cid_invalidate2', TRUE)->data);
// Create two cache entries with the same tag and an array tag value.
$backend->set('test_cid_invalidate1', $this->defaultValue, Cache::PERMANENT, [
'test_tag:1',
]);
$backend->set('test_cid_invalidate2', $this->defaultValue, Cache::PERMANENT, [
'test_tag:1',
]);
$this->assertSame($this->defaultValue, $backend->get('test_cid_invalidate1')->data);
$this->assertSame($this->defaultValue, $backend->get('test_cid_invalidate2')->data);
// Invalidate test_tag of value 1. This should invalidate both entries.
Cache::invalidateTags([
'test_tag:1',
]);
$this->assertFalse($backend->get('test_cid_invalidate1') || $backend->get('test_cid_invalidate2'), 'Two caches removed after invalidating a cache tag.');
// Verify that cache items have not been deleted after invalidation.
$this->assertSame($this->defaultValue, $backend->get('test_cid_invalidate1', TRUE)->data);
$this->assertSame($this->defaultValue, $backend->get('test_cid_invalidate2', TRUE)->data);
// Create three cache entries with a mix of tags and tag values.
$backend->set('test_cid_invalidate1', $this->defaultValue, Cache::PERMANENT, [
'test_tag:1',
]);
$backend->set('test_cid_invalidate2', $this->defaultValue, Cache::PERMANENT, [
'test_tag:2',
]);
$backend->set('test_cid_invalidate3', $this->defaultValue, Cache::PERMANENT, [
'test_tag_foo:3',
]);
$this->assertSame($this->defaultValue, $backend->get('test_cid_invalidate1')->data);
$this->assertSame($this->defaultValue, $backend->get('test_cid_invalidate2')->data);
$this->assertSame($this->defaultValue, $backend->get('test_cid_invalidate3')->data);
Cache::invalidateTags([
'test_tag_foo:3',
]);
// Verify that cache items not matching the tag were not invalidated.
$this->assertSame($this->defaultValue, $backend->get('test_cid_invalidate1')->data);
$this->assertSame($this->defaultValue, $backend->get('test_cid_invalidate2')->data);
$this->assertFalse($backend->get('test_cid_invalidate3'), 'Cached item matching the tag was removed.');
// Create cache entry in multiple bins. Two cache entries
// (test_cid_invalidate1 and test_cid_invalidate2) still exist from previous
// tests.
$tags = [
'test_tag:1',
'test_tag:2',
'test_tag:3',
];
$bins = [
'path',
'bootstrap',
'page',
];
foreach ($bins as $bin) {
$this->getCacheBackend($bin)
->set('test', $this->defaultValue, Cache::PERMANENT, $tags);
$this->assertNotEmpty($this->getCacheBackend($bin)
->get('test'), 'Cache item was set in bin.');
}
Cache::invalidateTags([
'test_tag:2',
]);
// Test that the cache entry has been invalidated in multiple bins.
foreach ($bins as $bin) {
$this->assertFalse($this->getCacheBackend($bin)
->get('test'), 'Tag invalidation affected item in bin.');
}
// Test that the cache entry with a matching tag has been invalidated.
$this->assertFalse($this->getCacheBackend($bin)
->get('test_cid_invalidate2'), 'Cache items matching tag were invalidated.');
// Test that the cache entry with without a matching tag still exists.
$this->assertNotEmpty($this->getCacheBackend($bin)
->get('test_cid_invalidate1'), 'Cache items not matching tag were not invalidated.');
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.