function DownloadTest::testPrivateFileTransfer

Test the private file transfer system.

File

drupal/core/modules/file/lib/Drupal/file/Tests/DownloadTest.php, line 54
Definition of Drupal\file\Tests\DownloadTest.

Class

DownloadTest
Tests for download/file transfer functions.

Namespace

Drupal\file\Tests

Code

function testPrivateFileTransfer() {

  // Set file downloads to private so handler functions get called.
  // Create a file.
  $contents = $this
    ->randomName(8);
  $file = $this
    ->createFile(NULL, $contents, 'private');
  $url = file_create_url($file->uri);

  // Set file_test access header to allow the download.
  file_test_set_return('download', array(
    'x-foo' => 'Bar',
  ));
  $this
    ->drupalGet($url);
  $headers = $this
    ->drupalGetHeaders();
  $this
    ->assertEqual($headers['x-foo'], 'Bar', t('Found header set by file_test module on private download.'));
  $this
    ->assertResponse(200, t('Correctly allowed access to a file when file_test provides headers.'));

  // Test that the file transfered correctly.
  $this
    ->assertEqual($contents, $this->content, t('Contents of the file are correct.'));

  // Deny access to all downloads via a -1 header.
  file_test_set_return('download', -1);
  $this
    ->drupalHead($url);
  $this
    ->assertResponse(403, t('Correctly denied access to a file when file_test sets the header to -1.'));

  // Try non-existent file.
  $url = file_create_url('private://' . $this
    ->randomName());
  $this
    ->drupalHead($url);
  $this
    ->assertResponse(404, t('Correctly returned 404 response for a non-existent file.'));
}