1.20.x bootstrap.test | BootstrapPageCacheTestCase::testConditionalRequests() |
Test support for requests containing If-Modified-Since and If-None-Match headers.
File
- modules/
simpletest/ tests/ bootstrap.test, line 117
Class
Code
function testConditionalRequests() {
config_set('system.core', 'cache', 1);
config_set('system.core', 'page_cache_background_fetch', 0);
config_set('system.core', 'page_cache_maximum_age', 300);
// Fill the cache.
$test_path = 'system-test/hello-world';
$this->backdropGet($test_path);
sleep(5);
$this->backdropHead($test_path);
$this->assertEqual($this->backdropGetHeader('X-Backdrop-Cache'), 'HIT', 'Page was cached.');
$etag = $this->backdropGetHeader('ETag');
$last_modified = $this->backdropGetHeader('Last-Modified');
// Match a cache based on Etag only.
$this->backdropGet($test_path, array(), array('If-None-Match: ' . $etag));
$this->assertResponse(304, 'Conditional request with Etag only returned 304 Not Modified.');
// Include both Etag and Date, even though the date is ignored.
// See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since
$this->backdropGet($test_path, array(), array('If-Modified-Since: ' . $last_modified, 'If-None-Match: ' . $etag));
$this->assertResponse(304, 'Conditional request with Etag and unnecessary If-Modified-Since returned 304 Not Modified.');
// Match a cache based on date only.
$this->backdropGet($test_path, array(), array('If-Modified-Since: ' . $last_modified));
$this->assertResponse(304, 'Conditional request without If-None-Match returned 304 Not Modified.');
// Try a conditional request that is too stale to get a cached copy.
$this->backdropGet($test_path, array(), array('If-Modified-Since: ' . gmdate(DATE_RFC1123, strtotime($last_modified) - 1)));
$this->assertResponse(200, 'Conditional request with new a If-Modified-Since date older than Last-Modified returned 200 OK.');
$this->assertEqual($this->backdropGetHeader('X-Backdrop-Cache'), 'HIT', 'Page was cached.');
$user = $this->backdropCreateUser();
$this->backdropLogin($user);
$this->backdropGet($test_path, 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->backdropGetHeader('X-Backdrop-Cache'), 'Absence of Page was not cached.');
}