From b057283bc3057bc2e5f65ef86c875827e6d6ca34 Mon Sep 17 00:00:00 2001 From: Dries Buytaert Date: Mon, 28 Dec 2009 12:06:49 +0000 Subject: - Patch #667264 by Damien Tournoud: improved generation of tests files to avoid concurrency problems causing the tests to /randomly/ fail. --- modules/simpletest/drupal_web_test_case.php | 37 +++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) (limited to 'modules/simpletest/drupal_web_test_case.php') diff --git a/modules/simpletest/drupal_web_test_case.php b/modules/simpletest/drupal_web_test_case.php index b9cd243be..19fe544c0 100644 --- a/modules/simpletest/drupal_web_test_case.php +++ b/modules/simpletest/drupal_web_test_case.php @@ -690,6 +690,11 @@ class DrupalWebTestCase extends DrupalTestCase { */ protected $session_id = NULL; + /** + * Whether the files were copied to the test files directory. + */ + protected $generatedTestFiles = FALSE; + /** * Constructor for DrupalWebTestCase. */ @@ -839,13 +844,36 @@ class DrupalWebTestCase extends DrupalTestCase { * List of files that match filter. */ protected function drupalGetTestFiles($type, $size = NULL) { - $files = array(); + if (empty($this->generatedTestFiles)) { + // Generate binary test files. + $lines = array(64, 1024); + $count = 0; + foreach ($lines as $line) { + simpletest_generate_file('binary-' . $count++, 64, $line, 'binary'); + } + + // Generate text test files. + $lines = array(16, 256, 1024, 2048, 20480); + $count = 0; + foreach ($lines as $line) { + simpletest_generate_file('text-' . $count++, 64, $line); + } + + // Copy other test files from simpletest. + $original = drupal_get_path('module', 'simpletest') . '/files'; + $files = file_scan_directory($original, '/(html|image|javascript|php|sql)-.*/'); + $destination_path = file_directory_path('public'); + foreach ($files as $file) { + file_unmanaged_copy($file->uri, $destination_path); + } + $this->generatedTestFiles = TRUE; + } + + $files = array(); // Make sure type is valid. if (in_array($type, array('binary', 'html', 'image', 'javascript', 'php', 'sql', 'text'))) { - // Use original file directory instead of one created during setUp(). - $path = $this->originalFileDirectory . '/simpletest'; - $files = file_scan_directory($path, '/' . $type . '\-.*/'); + $files = file_scan_directory(file_directory_path('public'), '/' . $type . '\-.*/'); // If size is set then remove any files that are not of that size. if ($size !== NULL) { @@ -1088,6 +1116,7 @@ class DrupalWebTestCase extends DrupalTestCase { file_prepare_directory($public_files_directory, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS); file_prepare_directory($private_files_directory, FILE_CREATE_DIRECTORY); file_prepare_directory($temp_files_directory, FILE_CREATE_DIRECTORY); + $this->generatedTestFiles = FALSE; // Log fatal errors. ini_set('log_errors', 1); -- cgit v1.2.3