function CronRunTestCase::testTempFileCleanup

7.x system.test CronRunTestCase::testTempFileCleanup()

Ensure that temporary files are removed.

Create files for all the possible combinations of age and status. We are using UPDATE statements rather than file_save() because it would set the timestamp.

File

drupal-7.x/modules/system/system.test, line 816
Tests for system.module.

Class

CronRunTestCase

Code

function testTempFileCleanup() {
  // Temporary file that is older than DRUPAL_MAXIMUM_TEMP_FILE_AGE.
  $temp_old = file_save_data('');
  db_update('file_managed')
    ->fields(array(
      'status' => 0,
      'timestamp' => 1,
    ))
    ->condition('fid', $temp_old->fid)
    ->execute();
  $this->assertTrue(file_exists($temp_old->uri), 'Old temp file was created correctly.');

  // Temporary file that is less than DRUPAL_MAXIMUM_TEMP_FILE_AGE.
  $temp_new = file_save_data('');
  db_update('file_managed')
    ->fields(array('status' => 0))
    ->condition('fid', $temp_new->fid)
    ->execute();
  $this->assertTrue(file_exists($temp_new->uri), 'New temp file was created correctly.');

  // Permanent file that is older than DRUPAL_MAXIMUM_TEMP_FILE_AGE.
  $perm_old = file_save_data('');
  db_update('file_managed')
    ->fields(array('timestamp' => 1))
    ->condition('fid', $temp_old->fid)
    ->execute();
  $this->assertTrue(file_exists($perm_old->uri), 'Old permanent file was created correctly.');

  // Permanent file that is newer than DRUPAL_MAXIMUM_TEMP_FILE_AGE.
  $perm_new = file_save_data('');
  $this->assertTrue(file_exists($perm_new->uri), 'New permanent file was created correctly.');

  // Run cron and then ensure that only the old, temp file was deleted.
  $this->cronRun();
  $this->assertFalse(file_exists($temp_old->uri), 'Old temp file was correctly removed.');
  $this->assertTrue(file_exists($temp_new->uri), 'New temp file was correctly ignored.');
  $this->assertTrue(file_exists($perm_old->uri), 'Old permanent file was correctly ignored.');
  $this->assertTrue(file_exists($perm_new->uri), 'New permanent file was correctly ignored.');
}