class CDNTestCase

Hierarchy

Expanded class hierarchy of CDNTestCase

Members

Contains filters are case sensitive
Namesort descending Modifiers Type Description
CDNTestCase::configureHTTPS function Configure HTTPS-related settings.
CDNTestCase::getExpandedFilePath function Given a file URI, get the expanded file path.
CDNTestCase::loadFile function
CDNTestCase::setRequestProtocol function Set the protocol of the current "request".
CDNTestCase::setUp function
CDNTestCase::tearDown function
CDNTestCase::touchFile function Given a file URI, get its path, create the file and ensure it exists.
CDNTestCase::variableSet function Mock function for variable_set().
CDNTestCase::variableSetDefaults function Set the default variable values for the CDN module.

File

modules/contrib/cdn/cdn.test, line 8
Test CDN.

View source
class CDNTestCase extends DrupalUnitTestCase {
  function setUp() {
    parent::setUp();

    // Alter $_SERVER to include some relatively rarely set HTTP headers.
    $alt_server = array(
      'HTTP_ACCEPT_ENCODING',
      'HTTPS' => 'off',
      'HTTP_X_FORWARDED_PROTO' => 'http',
    );
    $alt_server = array_merge($alt_server, $_SERVER);
    $_SERVER = $alt_server;
    $this->setRequestProtocol('http');

    // Pretend the CDN module is enabled; this ensures invocations of its own
    // hook implementations will work as expected.
    $cdn_module_file = drupal_get_path('module', 'cdn') . '/cdn.module';
    $module_list = module_list();
    $module_list['cdn']['filename'] = $cdn_module_file;
    module_list(TRUE, FALSE, FALSE, $module_list);
    $implementations = &drupal_static('module_implements');
    $implementations = array();

    $this->loadFile('cdn.constants.inc');
    $this->loadFile('cdn.module');

    // Override $conf to be able to use variable_set() and variable_get() in
    // DrupalUnitTestCase. At the same time, make sure we can restore the
    // original values.
    global $conf;
    $this->originalConfig = $conf;
    $this->variableSetDefaults();
  }

  function tearDown() {
    // Restore the original values that are used by variable_get().
    global $conf;
    $conf = $this->originalConfig;

    parent::tearDown();
  }

  function loadFile($file) {
    $cdn_path = DRUPAL_ROOT . '/' . drupal_get_path('module', 'cdn');
    require_once "$cdn_path/$file";
  }

  /**
   * Mock function for variable_set().
   */
  function variableSet($name, $value) {
    global $conf;
    $conf[$name] = $value;
  }

  /**
   * Set the default variable values for the CDN module.
   */
  function variableSetDefaults() {
    global $conf;
    $this->defaultConfig = array(
      CDN_STATUS_VARIABLE => CDN_ENABLED,
      CDN_MODE_VARIABLE => FALSE,
      CDN_HTTPS_SUPPORT_VARIABLE => FALSE,
      CDN_BASIC_MAPPING_VARIABLE => '',
      CDN_BASIC_MAPPING_HTTPS_VARIABLE => '',
      CDN_BASIC_FARFUTURE_VARIABLE => FALSE,
    );
    $conf = array_merge($conf, $this->defaultConfig);
  }

  /**
   * Set the protocol of the current "request".
   *
   * @param $protocol
   *   'http' or 'https'.
   */
  function setRequestProtocol($protocol) {
    if ($protocol == 'http') {
      $_SERVER['HTTPS'] = 'off';
      $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'http';
    }
    elseif ($protocol == 'https') {
      $_SERVER['HTTPS'] = 'on';
      $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'https';
    }
  }

  /**
   * Configure HTTPS-related settings.
   *
   * @param $supported
   *   Boolean that indicates whether HTTPS is supported by the current CDN
   *   or not.
   * @param $mapping
   *   The CDN mapping to use when the CDN supports HTTPS and the current
   *   request is happening over HTTPS.
   */
  function configureHTTPS($supported, $mapping = '') {
    $this->variableSet(CDN_HTTPS_SUPPORT_VARIABLE, $supported);
    $this->variableSet(CDN_BASIC_MAPPING_HTTPS_VARIABLE, $mapping);
  }

  /**
   * Given a file URI, get the expanded file path.
   *
   * @param $uri
   *   @see file_stream_wrapper_get_instance_by_uri()
   * @return
   *  A Drupal root-relative path.
   */
  function getExpandedFilePath($uri) {
    $wrapper = file_stream_wrapper_get_instance_by_uri($uri);
    return str_replace($GLOBALS['base_url'] . '/', '', $wrapper->getExternalUrl());
  }

  /**
   * Given a file URI, get its path, create the file and ensure it exists.
   *
   * @param $uri
   *   @see getExpandedFilePath()
   */
  function touchFile($uri) {
    $path = $this->getExpandedFilePath($uri);
    $this->assertTrue(touch(rawurldecode($path)), 'Test file created.');
    return $path;
  }
}