register('cache_factory', 'Drupal\Core\Cache\CacheFactory') ->addArgument(new Reference('settings')) ->addMethodCall('setContainer', [new Reference('service_container')]); } public function testTagInvalidations() { // Create cache entry in multiple bins. $tags = ['test_tag:1', 'test_tag:2', 'test_tag:3']; $bins = ['data', 'bootstrap', 'render']; foreach ($bins as $bin) { $bin = \Drupal::cache($bin); $bin->set('test', 'value', Cache::PERMANENT, $tags); $this->assertTrue($bin->get('test'), 'Cache item was set in bin.'); } $invalidations_before = intval(db_select('cachetags')->fields('cachetags', ['invalidations'])->condition('tag', 'test_tag:2')->execute()->fetchField()); Cache::invalidateTags(['test_tag:2']); // Test that cache entry has been invalidated in multiple bins. foreach ($bins as $bin) { $bin = \Drupal::cache($bin); $this->assertFalse($bin->get('test'), 'Tag invalidation affected item in bin.'); } // Test that only one tag invalidation has occurred. $invalidations_after = intval(db_select('cachetags')->fields('cachetags', ['invalidations'])->condition('tag', 'test_tag:2')->execute()->fetchField()); $this->assertEqual($invalidations_after, $invalidations_before + 1, 'Only one addition cache tag invalidation has occurred after invalidating a tag used in multiple bins.'); } }