home | career | drupal | java | mac | mysql | perl | php | scala | uml | unix

Drupal example source code file (cache.test)

This example Drupal source code file (cache.test) is included in the DevDaily.com "Drupal Source Code Warehouse" project. The intent of this project is to help you "Learn Drupal by Example".

PHP - Drupal tags/keywords

array, bin, cache, cid, clear, function, if, is, null, php, protected, var, was, with

The cache.test Drupal example source code

<?php
// $Id: cache.test,v 1.12 2010/08/05 23:53:38 webchick Exp $

class CacheTestCase extends DrupalWebTestCase {
  protected $default_bin = 'cache';
  protected $default_cid = 'test_temporary';
  protected $default_value = 'CacheTest';

  /**
   * Check whether or not a cache entry exists.
   *
   * @param $cid
   *   The cache id.
   * @param $var
   *   The variable the cache should contain.
   * @param $bin
   *   The bin the cache item was stored in.
   * @return
   *   TRUE on pass, FALSE on fail.
   */
  protected function checkCacheExists($cid, $var, $bin = NULL) {
    if ($bin == NULL) {
      $bin = $this->default_bin;
    }

    $cache = cache_get($cid, $bin);

    return isset($cache->data) && $cache->data == $var;
  }

  /**
   * Assert or a cache entry exists.
   *
   * @param $message
   *   Message to display.
   * @param $var
   *   The variable the cache should contain.
   * @param $cid
   *   The cache id.
   * @param $bin
   *   The bin the cache item was stored in.
   */
  protected function assertCacheExists($message, $var = NULL, $cid = NULL, $bin = NULL) {
    if ($bin == NULL) {
      $bin = $this->default_bin;
    }
    if ($cid == NULL) {
      $cid = $this->default_cid;
    }
    if ($var == NULL) {
      $var = $this->default_value;
    }

    $this->assertTrue($this->checkCacheExists($cid, $var, $bin), $message);
  }

  /**
   * Assert or a cache entry has been removed.
   *
   * @param $message
   *   Message to display.
   * @param $cid
   *   The cache id.
   * @param $bin
   *   The bin the cache item was stored in.
   */
  function assertCacheRemoved($message, $cid = NULL, $bin = NULL) {
    if ($bin == NULL) {
      $bin = $this->default_bin;
    }
    if ($cid == NULL) {
      $cid = $this->default_cid;
    }

    $cache = cache_get($cid, $bin);
    $this->assertFalse($cache, $message);
  }

  /**
   * Perform the general wipe.
   * @param $bin
   *   The bin to perform the wipe on.
   */
  protected function generalWipe($bin = NULL) {
    if ($bin == NULL) {
      $bin = $this->default_bin;
    }

    cache_clear_all(NULL, $bin);
  }

  /**
   * Setup the lifetime settings for caching.
   *
   * @param $time
   *   The time in seconds the cache should minimal live.
   */
  protected function setupLifetime($time) {
    variable_set('cache_lifetime', $time);
    variable_set('cache_flush', 0);
  }
}

class CacheSavingCase extends CacheTestCase {
  public static function getInfo() {
    return array(
      'name' => 'Cache saving test',
      'description' => 'Check our variables are saved and restored the right way.',
      'group' => 'Cache'
    );
  }

  /**
   * Test the saving and restoring of a string.
   */
  function testString() {
    $this->checkVariable($this->randomName(100));
  }

  /**
   * Test the saving and restoring of an integer.
   */
  function testInteger() {
    $this->checkVariable(100);
  }

  /**
   * Test the saving and restoring of a double.
   */
  function testDouble() {
    $this->checkVariable(1.29);
  }

  /**
   * Test the saving and restoring of an array.
   */
  function testArray() {
    $this->checkVariable(array('drupal1', 'drupal2' => 'drupal3', 'drupal4' => array('drupal5', 'drupal6')));
  }

  /**
   * Test the saving and restoring of an object.
   */
  function testObject() {
    $test_object = new stdClass();
    $test_object->test1 = $this->randomName(100);
    $test_object->test2 = 100;
    $test_object->test3 = array('drupal1', 'drupal2' => 'drupal3', 'drupal4' => array('drupal5', 'drupal6'));

    cache_set('test_object', $test_object, 'cache');
    $cache = cache_get('test_object', 'cache');
    $this->assertTrue(isset($cache->data) && $cache->data == $test_object, t('Object is saved and restored properly.'));
  }

  /*
   * Check or a variable is stored and restored properly.
   **/
  function checkVariable($var) {
    cache_set('test_var', $var, 'cache');
    $cache = cache_get('test_var', 'cache');
    $this->assertTrue(isset($cache->data) && $cache->data === $var, t('@type is saved and restored properly.', array('@type' => ucfirst(gettype($var)))));
  }
}

/**
 * Test cache_get_multiple().
 */
class CacheGetMultipleUnitTest extends CacheTestCase {

  public static function getInfo() {
    return array(
      'name' => 'Fetching multiple cache items',
      'description' => 'Confirm that multiple records are fetched correctly.',
      'group' => 'Cache',
    );
  }

  function setUp() {
    $this->default_bin = 'cache_page';
    parent::setUp();
  }

  /**
   * Test cache_get_multiple().
   */
  function testCacheMultiple() {
    $item1 = $this->randomName(10);
    $item2 = $this->randomName(10);
    cache_set('item1', $item1, $this->default_bin);
    cache_set('item2', $item2, $this->default_bin);
    $this->assertTrue($this->checkCacheExists('item1', $item1), t('Item 1 is cached.'));
    $this->assertTrue($this->checkCacheExists('item2', $item2), t('Item 2 is cached.'));

    // Fetch both records from the database with cache_get_multiple().
    $item_ids = array('item1', 'item2');
    $items = cache_get_multiple($item_ids, $this->default_bin);
    $this->assertEqual($items['item1']->data, $item1, t('Item was returned from cache successfully.'));
    $this->assertEqual($items['item2']->data, $item2, t('Item was returned from cache successfully.'));

    // Remove one item from the cache.
    cache_clear_all('item2', $this->default_bin);

    // Confirm that only one item is returned by cache_get_multiple().
    $item_ids = array('item1', 'item2');
    $items = cache_get_multiple($item_ids, $this->default_bin);
    $this->assertEqual($items['item1']->data, $item1, t('Item was returned from cache successfully.'));
    $this->assertFalse(isset($items['item2']), t('Item was not returned from the cache.'));
    $this->assertTrue(count($items) == 1, t('Only valid cache entries returned.'));
  }
}

/**
 * Test cache clearing methods.
 */
class CacheClearCase extends CacheTestCase {
  public static function getInfo() {
    return array(
      'name' => 'Cache clear test',
      'description' => 'Check our clearing is done the proper way.',
      'group' => 'Cache'
    );
  }

  function setUp() {
    $this->default_bin = 'cache_page';
    $this->default_value = $this->randomName(10);

    parent::setUp();
  }

  /**
   * Test clearing using a cid.
   */
  function testClearCid() {
    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 clearing using wildcard.
   */
  function testClearWildcard() {
    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.'));

    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 substring with wildcard true.'));
    cache_clear_all('test_', $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 substring with wildcard true.'));
  }

  /**
   * Test clearing using an array.
   */
  function testClearArray() {
    // Create three cache entries.
    cache_set('test_cid_clear1', $this->default_value, $this->default_bin);
    cache_set('test_cid_clear2', $this->default_value, $this->default_bin);
    cache_set('test_cid_clear3', $this->default_value, $this->default_bin);
    $this->assertTrue($this->checkCacheExists('test_cid_clear1', $this->default_value)
                      && $this->checkCacheExists('test_cid_clear2', $this->default_value)
                      && $this->checkCacheExists('test_cid_clear3', $this->default_value),
                      t('Three cache entries were created.'));

    // Clear two entries using an array.
    cache_clear_all(array('test_cid_clear1', 'test_cid_clear2'), $this->default_bin);
    $this->assertFalse($this->checkCacheExists('test_cid_clear1', $this->default_value)
                       || $this->checkCacheExists('test_cid_clear2', $this->default_value),
                       t('Two cache entries removed after clearing with an array.'));

    $this->assertTrue($this->checkCacheExists('test_cid_clear3', $this->default_value),
                      t('Entry was not cleared from the cache'));

    // Set the cache clear threshold to 2 to confirm that the full bin is cleared
    // when the threshold is exceeded.
    variable_set('cache_clear_threshold', 2);
    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 cache entries were created.'));
    cache_clear_all(array('test_cid_clear1', 'test_cid_clear2', 'test_cid_clear3'), $this->default_bin);
    $this->assertFalse($this->checkCacheExists('test_cid_clear1', $this->default_value)
                       || $this->checkCacheExists('test_cid_clear2', $this->default_value)
                       || $this->checkCacheExists('test_cid_clear3', $this->default_value),
                       t('All cache entries removed when the array exceeded the cache clear threshold.'));
  }
}

/**
 * Test cache_is_empty() function.
 */
class CacheIsEmptyCase extends CacheTestCase {
  public static function getInfo() {
    return array(
      'name' => 'Cache emptiness test',
      'description' => 'Check if a cache bin is empty after performing clear operations.',
      'group' => 'Cache'
    );
  }

  function setUp() {
    $this->default_bin = 'cache_page';
    $this->default_value = $this->randomName(10);

    parent::setUp();
  }

  /**
   * Test clearing using a cid.
   */
  function testIsEmpty() {
    // Clear the cache bin.
    cache_clear_all('*', $this->default_bin);
    $this->assertTrue(cache_is_empty($this->default_bin), t('The cache bin is empty'));
    // Add some data to the cache bin.
    cache_set($this->default_cid, $this->default_value, $this->default_bin);
    $this->assertCacheExists(t('Cache was set.'), $this->default_value, $this->default_cid);
    $this->assertFalse(cache_is_empty($this->default_bin), t('The cache bin is not empty'));
    // Remove the cached data.
    cache_clear_all($this->default_cid, $this->default_bin);
    $this->assertCacheRemoved(t('Cache was removed.'), $this->default_cid);
    $this->assertTrue(cache_is_empty($this->default_bin), t('The cache bin is empty'));
  }
}

Other Drupal examples (source code examples)

Here is a short list of links related to this Drupal cache.test source code file:

new blog posts

"Drupal" is a registered trademark of Dries Buytaert.

my drupal tutorials and examples  

Copyright 1998-2016 Alvin Alexander, alvinalexander.com
All Rights Reserved.

Beginning in 2016, a portion of the proceeds from pages under the '/drupal-code-examples/' URI will be donated to charity.