Nelson Hart
11 years ago
7 changed files with 356 additions and 30 deletions
@ -0,0 +1,160 @@
|
||||
<?php |
||||
|
||||
/** |
||||
* @file |
||||
* Tests to verify the cache headers we provide. |
||||
*/ |
||||
|
||||
class IslandoraDatastreamCacheTestCase extends IslandoraWebTestCase { |
||||
|
||||
/** |
||||
* Gets info to display to describe this test. |
||||
* |
||||
* @see IslandoraWebTestCase::getInfo() |
||||
*/ |
||||
public static function getInfo() { |
||||
return array( |
||||
'name' => 'Datastream Cache Headers', |
||||
'description' => 'Check our headers work as we expect them to.', |
||||
'group' => 'Islandora', |
||||
); |
||||
} |
||||
|
||||
/** |
||||
* Creates an admin user and a connection to a fedora repository. |
||||
* |
||||
* @see IslandoraWebTestCase::setUp() |
||||
*/ |
||||
public function setUp() { |
||||
parent::setUp(); |
||||
$this->repository = $this->admin->repository; |
||||
$this->purgeTestObjects(); |
||||
} |
||||
|
||||
/** |
||||
* Free any objects/resources created for this test. |
||||
* |
||||
* @see IslandoraWebTestCase::tearDown() |
||||
*/ |
||||
public function tearDown() { |
||||
$this->purgeTestObjects(); |
||||
parent::tearDown(); |
||||
} |
||||
|
||||
/** |
||||
* Purge any objects created by the test's in this class. |
||||
*/ |
||||
public function purgeTestObjects() { |
||||
$objects = array( |
||||
'test:test', |
||||
); |
||||
foreach ($objects as $object) { |
||||
try { |
||||
$object = $this->repository->getObject($object); |
||||
$this->repository->purgeObject($object->id); |
||||
} |
||||
catch (Exception $e) { |
||||
// Meh... Either it didn't exist or the purge failed. |
||||
} |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Create our test object. |
||||
*/ |
||||
protected function createTestObject() { |
||||
$object = $this->repository->constructObject('test:test'); |
||||
$object->label = 'Test object'; |
||||
$object->models = 'test:model'; |
||||
$datastream = $object->constructDatastream('asdf', 'M'); |
||||
$datastream->label = 'datastream of doom'; |
||||
$datastream->mimetype = 'text/plain'; |
||||
$datastream->content = 'And then things happened.'; |
||||
$datastream->checksumType = 'SHA-1'; |
||||
$object->ingestDatastream($datastream); |
||||
$this->repository->ingestObject($object); |
||||
return $object; |
||||
} |
||||
|
||||
/** |
||||
* Test HTTP cache headers. |
||||
*/ |
||||
public function testCacheHeaders() { |
||||
$object = $this->createTestObject(); |
||||
$datastream = $object['asdf']; |
||||
|
||||
$user = $this->drupalCreateUser(array(ISLANDORA_VIEW_OBJECTS)); |
||||
$this->drupalLogin($user); |
||||
|
||||
// Test If-Modified-Since. |
||||
$result = $this->drupalGet("islandora/object/{$object->id}/datastream/{$datastream->id}/view", array(), array( |
||||
'If-Modified-Since: ' . $datastream->createdDate->format('D, d M Y H:i:s \G\M\T'), |
||||
)); |
||||
$this->assertResponse(304); |
||||
$result = $this->drupalGet("islandora/object/{$object->id}/datastream/{$datastream->id}/view", array(), array( |
||||
'If-Modified-Since: ' . $datastream->createdDate->sub(new DateInterval('P1M'))->format('D, d M Y H:i:s \G\M\T'), |
||||
)); |
||||
$this->assertResponse(200); |
||||
|
||||
// Test If-Unmodified-Since. |
||||
$result = $this->drupalGet("islandora/object/{$object->id}/datastream/{$datastream->id}/view", array(), array( |
||||
'If-Unmodified-Since: ' . $datastream->createdDate->format('D, d M Y H:i:s \G\M\T'), |
||||
)); |
||||
$this->assertResponse(200); |
||||
$result = $this->drupalGet("islandora/object/{$object->id}/datastream/{$datastream->id}/view", array(), array( |
||||
'If-Unmodified-Since: ' . $datastream->createdDate->sub(new DateInterval('P1M'))->format('D, d M Y H:i:s \G\M\T'), |
||||
)); |
||||
$this->assertResponse(412); |
||||
|
||||
// Test If-Match. |
||||
$result = $this->drupalGet("islandora/object/{$object->id}/datastream/{$datastream->id}/view", array(), array( |
||||
format_string('If-Match: "!checksum"', array( |
||||
'!checksum' => $datastream->checksum, |
||||
)), |
||||
)); |
||||
$this->assertResponse(200); |
||||
$result = $this->drupalGet("islandora/object/{$object->id}/datastream/{$datastream->id}/view", array(), array( |
||||
format_string('If-Match: "!checksum"', array( |
||||
'!checksum' => 'dont-match' . $datastream->checksum, |
||||
)), |
||||
)); |
||||
$this->assertResponse(412); |
||||
|
||||
// Test If-None-Match. |
||||
$result = $this->drupalGet("islandora/object/{$object->id}/datastream/{$datastream->id}/view", array(), array( |
||||
format_string('If-None-Match: "!checksum"', array( |
||||
'!checksum' => $datastream->checksum, |
||||
)), |
||||
)); |
||||
$this->assertResponse(304); |
||||
$result = $this->drupalGet("islandora/object/{$object->id}/datastream/{$datastream->id}/view", array(), array( |
||||
format_string('If-None-Match: "!checksum"', array( |
||||
'!checksum' => 'dont-match' . $datastream->checksum, |
||||
)), |
||||
)); |
||||
$this->assertResponse(200); |
||||
|
||||
// Test combination of If-None-Match and If-Modified-Since |
||||
$result = $this->drupalGet("islandora/object/{$object->id}/datastream/{$datastream->id}/view", array(), array( |
||||
'If-Modified-Since: ' . $datastream->createdDate->format('D, d M Y H:i:s \G\M\T'), |
||||
format_string('If-None-Match: "!checksum"', array( |
||||
'!checksum' => $datastream->checksum, |
||||
)), |
||||
)); |
||||
$this->assertResponse(304); |
||||
$result = $this->drupalGet("islandora/object/{$object->id}/datastream/{$datastream->id}/view", array(), array( |
||||
'If-Modified-Since: ' . $datastream->createdDate->format('D, d M Y H:i:s \G\M\T'), |
||||
format_string('If-None-Match: "!checksum"', array( |
||||
'!checksum' => 'dont-match' . $datastream->checksum, |
||||
)), |
||||
)); |
||||
$this->assertResponse(200); |
||||
$result = $this->drupalGet("islandora/object/{$object->id}/datastream/{$datastream->id}/view", array(), array( |
||||
'If-Modified-Since: ' . $datastream->createdDate->sub(new DateInterval('P1M'))->format('D, d M Y H:i:s \G\M\T'), |
||||
format_string('If-None-Match: "!checksum"', array( |
||||
'!checksum' => $datastream->checksum, |
||||
)), |
||||
)); |
||||
$this->assertResponse(200); |
||||
} |
||||
} |
Loading…
Reference in new issue