class MemCacheClearCase in Memcache API and Integration 7
Same name in this branch
- 7 tests/memcache.test \MemCacheClearCase
- 7 tests/memcache6.test \MemCacheClearCase
Same name and namespace in other branches
- 6 tests/memcache.test \MemCacheClearCase
Test cache clearing methods.
Hierarchy
- class \MemCacheClearCase extends \MemcacheTestCase
Expanded class hierarchy of MemCacheClearCase
File
- tests/
memcache.test, line 422 - Test cases for the memcache cache backend.
View source
class MemCacheClearCase extends MemcacheTestCase {
public static function getInfo() {
return array(
'name' => 'Cache clear test',
'description' => 'Check our clearing is done the proper way.',
'group' => 'Memcache',
);
}
/**
* @see MemcacheTestCase::setUp()
*/
public function setUp() {
parent::setUp('memcache_test');
$this->default_value = $this
->randomName(10);
}
/**
* Test clearing the cache with a cid, no cache lifetime.
*/
public function testClearCidNoLifetime() {
$this
->clearCidTest();
}
/**
* Test clearing the cache with a cid, with cache lifetime.
*/
public function testClearCidLifetime() {
variable_set('cache_lifetime', 6000);
$this
->clearCidTest();
}
/**
* Test clearing using wildcard prefixes, no cache lifetime.
*/
public function testClearWildcardNoLifetime() {
$this
->clearWildcardPrefixTest();
}
/**
* Test clearing using wildcard prefix, with cache lifetime.
*/
public function testClearWildcardLifetime() {
variable_set('cache_lifetime', 6000);
$this
->clearWildcardPrefixTest();
}
/**
* Test full bin flushes with no cache lifetime.
*/
public function testClearWildcardFull() {
cache_set('test_cid_clear1', $this->default_value, $this->default_bin);
cache_set('test_cid_clear2', $this->default_value, $this->default_bin);
$this
->assertTrue($this
->checkCacheExists('test_cid_clear1', $this->default_value) && $this
->checkCacheExists('test_cid_clear2', $this->default_value), t('Two caches were created for checking cid "*" with wildcard true.'));
cache_clear_all('*', $this->default_bin, TRUE);
$this
->assertFalse($this
->checkCacheExists('test_cid_clear1', $this->default_value) || $this
->checkCacheExists('test_cid_clear2', $this->default_value), t('Two caches removed after clearing cid "*" with wildcard true.'));
}
/**
* Test full bin flushes with cache lifetime.
*/
public function testClearCacheLifetime() {
variable_set('cache_lifetime', 600);
$this
->resetVariables();
// Set a cache item with an expiry.
cache_set('test_cid', $this->default_value, $this->default_bin, time() + 3600);
$this
->assertTrue($this
->checkCacheExists('test_cid', $this->default_value), 'Cache item was created successfully.');
// Set a permanent cache item.
cache_set('test_cid_2', $this->default_value, $this->default_bin);
// Clear the page and block caches.
cache_clear_all(MEMCACHE_CONTENT_CLEAR, $this->default_bin);
// Since the cache was cleared within the current session, cache_get()
// should return false.
$this
->assertFalse($this
->checkCacheExists('test_cid', $this->default_value), 'Cache item was cleared successfully.');
// However permament items should stay in place.
$this
->assertTrue($this
->checkCacheExists('test_cid_2', $this->default_value), 'Cache item was not cleared');
// If $_SESSION['cache_flush'] is not set, then the expired item should
// be returned.
unset($_SESSION['cache_flush']);
$this
->assertTrue($this
->checkCacheExists('test_cid', $this->default_value), 'Cache item is still returned due to minimum cache lifetime.');
// Set a much shorter cache lifetime.
variable_set('cache_content_flush_' . $this->default_bin, 0);
variable_set('cache_lifetime', 1);
cache_set('test_cid', $this->default_value, $this->default_bin, time() + 6000);
$this
->assertTrue($this
->checkCacheExists('test_cid', $this->default_value), 'Cache item was created successfully.');
cache_clear_all(MEMCACHE_CONTENT_CLEAR, $this->default_bin);
$this
->assertFalse($this
->checkCacheExists('test_cid', $this->default_value), 'Cache item is not returned once minimum cache lifetime has expired.');
// Reset the cache clear variables.
variable_set('cache_content_flush_' . $this->default_bin, 0);
variable_set('cache_lifetime', 6000);
$this
->resetVariables();
// Confirm that cache_lifetime does not take effect for full bin flushes.
cache_set('test_cid', $this->default_value, $this->default_bin, time() + 6000);
$this
->assertTrue($this
->checkCacheExists('test_cid', $this->default_value), 'Cache item was created successfully.');
cache_set('test_cid_2', $this->default_value, $this->default_bin);
$this
->assertTrue($this
->checkCacheExists('test_cid_2', $this->default_value), 'Cache item was created successfully.');
// Now flush the bin.
cache_clear_all('*', $this->default_bin, TRUE);
$this
->assertFalse($this
->checkCacheExists('test_cid', $this->default_value), 'Cache item was cleared successfully.');
$this
->assertFalse($this
->checkCacheExists('test_cid_2', $this->default_value), 'Cache item was cleared successfully.');
}
/**
* Test different wildcards to verify the wildcard optimizations.
*/
public function testWildCardOptimizations() {
// Set and clear a cache with a short cid/wildcard.
cache_set('foo:1', $this->default_value, $this->default_bin);
$this
->assertCacheExists(t('Foo cache was set.'), $this->default_value, 'foo:1');
cache_clear_all('foo', $this->default_bin, TRUE);
$this
->assertCacheRemoved(t('Foo cache was invalidated.'), 'foo:1');
// Set additional longer caches.
cache_set('foobar', $this->default_value, $this->default_bin);
cache_set('foofoo', $this->default_value, $this->default_bin);
$this
->assertCacheExists(t('Foobar cache set.'), $this->default_value, 'foobar');
$this
->assertCacheExists(t('Foofoo cache set.'), $this->default_value, 'foofoo');
// Clear one of them with a wildcard and make sure the other one is still
// valid.
cache_clear_all('foobar', $this->default_bin, TRUE);
$this
->assertCacheRemoved(t('Foobar cache invalidated.'), 'foobar');
$this
->assertCacheExists(t('Foofoo cache still valid.'), $this->default_value, 'foofoo');
// Set and clear a cache with a different, equally short cid/wildcard.
cache_set('bar:1', $this->default_value, $this->default_bin);
$this
->assertCacheExists(t('Bar cache was set.'), $this->default_value, 'bar:1');
cache_clear_all('bar', $this->default_bin, TRUE);
$this
->assertCacheRemoved(t('Bar cache invalidated.'), 'bar:1');
$this
->assertCacheExists(t('Foofoo cache still valid.'), $this->default_value, 'foofoo');
// Clear cache with an even shorter wildcard. This results in a full bin
// bin clear, all entries are marked invalid.
cache_set('bar:2', $this->default_value, $this->default_bin);
cache_clear_all('ba', $this->default_bin, TRUE);
$this
->assertCacheRemoved(t('Bar:1 cache invalidated.'), 'bar:1');
$this
->assertCacheRemoved(t('Bar:2 cache invalidated.'), 'bar:2');
$this
->assertCacheRemoved(t('Foofoo cache invalidated.'), 'foofoo');
}
/**
* Test CACHE_TEMPORARY and CACHE_PERMANENT behaviour.
*/
public function testClearTemporaryPermanent() {
cache_set('test_cid_clear_temporary', $this->default_value, $this->default_bin, CACHE_TEMPORARY);
cache_set('test_cid_clear_permanent', $this->default_value, $this->default_bin, CACHE_PERMANENT);
cache_set('test_cid_clear_future', $this->default_value, $this->default_bin, time() + 3600);
$this
->assertTrue($this
->checkCacheExists('test_cid_clear_temporary', $this->default_value) && $this
->checkCacheExists('test_cid_clear_permanent', $this->default_value) && $this
->checkCacheExists('test_cid_clear_future', $this->default_value), t('Three cache items were created for checking cache expiry.'));
// This should clear only expirable items (CACHE_TEMPORARY).
cache_clear_all(NULL, $this->default_bin, TRUE);
$this
->assertFalse($this
->checkCacheExists('test_cid_clear_temporary', $this->default_value), t('Temporary cache item was removed after clearing cid NULL.'));
$this
->assertTrue($this
->checkCacheExists('test_cid_clear_permanent', $this->default_value), t('Permanent cache item was not removed after clearing cid NULL.'));
$this
->assertTrue($this
->checkCacheExists('test_cid_clear_future', $this->default_value), t('Future cache item was not removed after clearing cid NULL.'));
}
/**
* Test clearing using a cid.
*/
public function clearCidTest() {
cache_set('test_cid_clear', $this->default_value, $this->default_bin);
$this
->assertCacheExists(t('Cache was set for clearing cid.'), $this->default_value, 'test_cid_clear');
cache_clear_all('test_cid_clear', $this->default_bin);
$this
->assertCacheRemoved(t('Cache was removed after clearing cid.'), 'test_cid_clear');
cache_set('test_cid_clear1', $this->default_value, $this->default_bin);
cache_set('test_cid_clear2', $this->default_value, $this->default_bin);
$this
->assertTrue($this
->checkCacheExists('test_cid_clear1', $this->default_value) && $this
->checkCacheExists('test_cid_clear2', $this->default_value), t('Two caches were created for checking cid "*" with wildcard false.'));
cache_clear_all('*', $this->default_bin);
$this
->assertTrue($this
->checkCacheExists('test_cid_clear1', $this->default_value) && $this
->checkCacheExists('test_cid_clear2', $this->default_value), t('Two caches still exists after clearing cid "*" with wildcard false.'));
}
/**
* Test cache clears using wildcard prefixes.
*/
public function clearWildcardPrefixTest() {
$this
->resetVariables();
cache_set('test_cid_clear:1', $this->default_value, $this->default_bin);
cache_set('test_cid_clear:2', $this->default_value, $this->default_bin);
$this
->assertTrue($this
->checkCacheExists('test_cid_clear:1', $this->default_value) && $this
->checkCacheExists('test_cid_clear:2', $this->default_value), t('Two caches were created for checking cid substring with wildcard true.'));
cache_clear_all('test_cid_clear:', $this->default_bin, TRUE);
$this
->assertFalse($this
->checkCacheExists('test_cid_clear:1', $this->default_value) || $this
->checkCacheExists('test_cid_clear:2', $this->default_value), t('Two caches removed after clearing cid substring with wildcard true.'));
// Test for the case where a wildcard object disappears, for example a
// partial memcache restart or eviction.
cache_set('test_cid_clear:1', $this->default_value, $this->default_bin);
$this
->assertTrue($this
->checkCacheExists('test_cid_clear:1', $this->default_value), 'The cache was created successfully.');
cache_clear_all('test_', $this->default_bin, TRUE);
$this
->assertFalse($this
->checkCacheExists('test_cid_clear:1', $this->default_value), 'The cache was cleared successfully.');
// Delete the wildcard manually to simulate an eviction.
$wildcard = '.wildcard-test_cid_clear:';
dmemcache_delete($wildcard, $this->default_bin);
// Reset the memcache_wildcards() static cache.
// @todo: this is a class object in D7.
// memcache_wildcards(FALSE, FALSE, FALSE, TRUE);
$this
->assertFalse($this
->checkCacheExists('test_cid_clear:1', $this->default_value), 'The cache was cleared successfully.');
}
/**
* Test wildcard flushing on separate pages to ensure no static cache is used.
*/
public function testClearWildcardOnSeparatePages() {
$random_wildcard = $this
->randomName(2) . ':' . $this
->randomName(3);
$random_key = $random_wildcard . ':' . $this
->randomName(4) . ':' . $this
->randomName(2);
$random_value = $this
->randomName();
$this
->drupalGetAJAX('memcache-test/clear-cache');
$data = $this
->drupalGetAJAX('memcache-test/set/' . $random_key . '/' . $random_value);
$this
->assertTrue(is_array($data), 'Cache has data.');
$this
->assertEqual($random_key, $data['cid'], 'Cache keys match.');
$this
->assertEqual($random_value, $data['data'], 'Cache values match.');
$data = $this
->drupalGetAJAX('memcache-test/get/' . $random_key);
$this
->assertEqual($random_key, $data['cid'], 'Cache keys match.');
$this
->assertEqual($random_value, $data['data'], 'Cache values match.');
$this
->drupalGet('memcache-test/clear/' . $random_key);
$data = $this
->drupalGetAJAX('memcache-test/get/' . $random_key);
$this
->assertFalse($data, 'Cache value at specific key was properly flushed.');
$data = $this
->drupalGetAJAX('memcache-test/set/' . $random_key . '/' . $random_value);
$this
->assertTrue(is_array($data), 'Cache has data.');
$this
->assertEqual($random_key, $data['cid'], 'Cache keys match.');
$this
->assertEqual($random_value, $data['data'], 'Cache values match.');
$data = $this
->drupalGetAJAX('memcache-test/get/' . $random_key);
$this
->assertEqual($random_key, $data['cid'], 'Cache keys match.');
$this
->assertEqual($random_value, $data['data'], 'Cache values match.');
$this
->drupalGet('memcache-test/wildcard-clear/' . $random_wildcard);
$data = $this
->drupalGetAJAX('memcache-test/get/' . $random_key);
$this
->assertFalse($data, 'Cache was properly flushed.');
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
MemCacheClearCase:: |
public | function | Test clearing using a cid. | |
MemCacheClearCase:: |
public | function | Test cache clears using wildcard prefixes. | |
MemCacheClearCase:: |
public static | function | ||
MemCacheClearCase:: |
public | function | ||
MemCacheClearCase:: |
public | function | Test full bin flushes with cache lifetime. | |
MemCacheClearCase:: |
public | function | Test clearing the cache with a cid, with cache lifetime. | |
MemCacheClearCase:: |
public | function | Test clearing the cache with a cid, no cache lifetime. | |
MemCacheClearCase:: |
public | function | Test CACHE_TEMPORARY and CACHE_PERMANENT behaviour. | |
MemCacheClearCase:: |
public | function | Test full bin flushes with no cache lifetime. | |
MemCacheClearCase:: |
public | function | Test clearing using wildcard prefix, with cache lifetime. | |
MemCacheClearCase:: |
public | function | Test clearing using wildcard prefixes, no cache lifetime. | |
MemCacheClearCase:: |
public | function | Test wildcard flushing on separate pages to ensure no static cache is used. | |
MemCacheClearCase:: |
public | function | Test different wildcards to verify the wildcard optimizations. |