function BootstrapPageCacheTestCase::testConditionalRequests

7.x bootstrap.test BootstrapPageCacheTestCase::testConditionalRequests()

Test support for requests containing If-Modified-Since and If-None-Match headers.

File

drupal-7.x/modules/simpletest/tests/bootstrap.test, line 118

Class

BootstrapPageCacheTestCase

Code

function testConditionalRequests() {
  variable_set('cache', 1);

  // Fill the cache.
  $this->drupalGet('');

  $this->drupalHead('');
  $this->assertEqual($this->drupalGetHeader('X-Drupal-Cache'), 'HIT', 'Page was cached.');
  $etag = $this->drupalGetHeader('ETag');
  $last_modified = $this->drupalGetHeader('Last-Modified');

  $this->drupalGet('', array(), array('If-Modified-Since: ' . $last_modified, 'If-None-Match: ' . $etag));
  $this->assertResponse(304, 'Conditional request returned 304 Not Modified.');

  $this->drupalGet('', array(), array('If-Modified-Since: ' . gmdate(DATE_RFC822, strtotime($last_modified)), 'If-None-Match: ' . $etag));
  $this->assertResponse(304, 'Conditional request with obsolete If-Modified-Since date returned 304 Not Modified.');

  $this->drupalGet('', array(), array('If-Modified-Since: ' . gmdate(DATE_RFC850, strtotime($last_modified)), 'If-None-Match: ' . $etag));
  $this->assertResponse(304, 'Conditional request with obsolete If-Modified-Since date returned 304 Not Modified.');

  $this->drupalGet('', array(), array('If-Modified-Since: ' . $last_modified));
  $this->assertResponse(200, 'Conditional request without If-None-Match returned 200 OK.');
  $this->assertEqual($this->drupalGetHeader('X-Drupal-Cache'), 'HIT', 'Page was cached.');

  $this->drupalGet('', array(), array('If-Modified-Since: ' . gmdate(DATE_RFC1123, strtotime($last_modified) + 1), 'If-None-Match: ' . $etag));
  $this->assertResponse(200, 'Conditional request with new a If-Modified-Since date newer than Last-Modified returned 200 OK.');
  $this->assertEqual($this->drupalGetHeader('X-Drupal-Cache'), 'HIT', 'Page was cached.');

  $user = $this->drupalCreateUser();
  $this->drupalLogin($user);
  $this->drupalGet('', array(), array('If-Modified-Since: ' . $last_modified, 'If-None-Match: ' . $etag));
  $this->assertResponse(200, 'Conditional request returned 200 OK for authenticated user.');
  $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache'), 'Absense of Page was not cached.');
}