diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index eab3d46eb7..a1bc47e859 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -896,6 +896,7 @@ phutil_register_library_map(array( 'PhabricatorFileStorageConfigurationException' => 'applications/files/exception/PhabricatorFileStorageConfigurationException.php', 'PhabricatorFileStorageEngine' => 'applications/files/engine/PhabricatorFileStorageEngine.php', 'PhabricatorFileStorageEngineSelector' => 'applications/files/engineselector/PhabricatorFileStorageEngineSelector.php', + 'PhabricatorFileTestCase' => 'applications/files/storage/__tests__/PhabricatorFileTestCase.php', 'PhabricatorFileTransformController' => 'applications/files/controller/PhabricatorFileTransformController.php', 'PhabricatorFileUploadController' => 'applications/files/controller/PhabricatorFileUploadController.php', 'PhabricatorFileUploadException' => 'applications/files/exception/PhabricatorFileUploadException.php', @@ -1301,6 +1302,7 @@ phutil_register_library_map(array( 'PhabricatorTagView' => 'view/layout/PhabricatorTagView.php', 'PhabricatorTaskmasterDaemon' => 'infrastructure/daemon/workers/PhabricatorTaskmasterDaemon.php', 'PhabricatorTestCase' => 'infrastructure/testing/PhabricatorTestCase.php', + 'PhabricatorTestStorageEngine' => 'applications/files/engine/PhabricatorTestStorageEngine.php', 'PhabricatorTestWorker' => 'infrastructure/daemon/workers/__tests__/PhabricatorTestWorker.php', 'PhabricatorTimelineCursor' => 'infrastructure/daemon/timeline/storage/PhabricatorTimelineCursor.php', 'PhabricatorTimelineDAO' => 'infrastructure/daemon/timeline/storage/PhabricatorTimelineDAO.php', @@ -2338,6 +2340,7 @@ phutil_register_library_map(array( 'PhabricatorFileShortcutController' => 'PhabricatorFileController', 'PhabricatorFileStorageBlob' => 'PhabricatorFileDAO', 'PhabricatorFileStorageConfigurationException' => 'Exception', + 'PhabricatorFileTestCase' => 'PhabricatorTestCase', 'PhabricatorFileTransformController' => 'PhabricatorFileController', 'PhabricatorFileUploadController' => 'PhabricatorFileController', 'PhabricatorFileUploadException' => 'Exception', @@ -2703,6 +2706,7 @@ phutil_register_library_map(array( 'PhabricatorTagView' => 'AphrontView', 'PhabricatorTaskmasterDaemon' => 'PhabricatorDaemon', 'PhabricatorTestCase' => 'ArcanistPhutilTestCase', + 'PhabricatorTestStorageEngine' => 'PhabricatorFileStorageEngine', 'PhabricatorTestWorker' => 'PhabricatorWorker', 'PhabricatorTimelineCursor' => 'PhabricatorTimelineDAO', 'PhabricatorTimelineDAO' => 'PhabricatorLiskDAO', diff --git a/src/applications/files/engine/PhabricatorTestStorageEngine.php b/src/applications/files/engine/PhabricatorTestStorageEngine.php new file mode 100644 index 0000000000..af45c6574a --- /dev/null +++ b/src/applications/files/engine/PhabricatorTestStorageEngine.php @@ -0,0 +1,36 @@ +selectStorageEngines($data, $params); + if (isset($params['storageEngines'])) { + $engines = $params['storageEngines']; + } else { + $selector = PhabricatorEnv::newObjectFromConfig( + 'storage.engine-selector'); + $engines = $selector->selectStorageEngines($data, $params); + } + + assert_instances_of($engines, 'PhabricatorFileStorageEngine'); if (!$engines) { throw new Exception("No valid storage engines are available!"); } diff --git a/src/applications/files/storage/__tests__/PhabricatorFileTestCase.php b/src/applications/files/storage/__tests__/PhabricatorFileTestCase.php new file mode 100644 index 0000000000..334d3a92f1 --- /dev/null +++ b/src/applications/files/storage/__tests__/PhabricatorFileTestCase.php @@ -0,0 +1,61 @@ + true, + ); + } + + public function testFileStorageReadWrite() { + $engine = new PhabricatorTestStorageEngine(); + + $data = Filesystem::readRandomCharacters(64); + + $params = array( + 'name' => 'test.dat', + 'storageEngines' => array( + $engine, + ), + ); + + $file = PhabricatorFile::newFromFileData($data, $params); + + // Test that the storage engine worked, and was the target of the write. We + // don't actually care what the data is (future changes may compress or + // encrypt it), just that it exists in the test storage engine. + $engine->readFile($file->getStorageHandle()); + + // Now test that we get the same data back out. + $this->assertEqual($data, $file->loadFileData()); + } + + + public function testFileStorageDelete() { + $engine = new PhabricatorTestStorageEngine(); + + $data = Filesystem::readRandomCharacters(64); + + $params = array( + 'name' => 'test.dat', + 'storageEngines' => array( + $engine, + ), + ); + + $file = PhabricatorFile::newFromFileData($data, $params); + $handle = $file->getStorageHandle(); + $file->delete(); + + $caught = null; + try { + $engine->readFile($handle); + } catch (Exception $ex) { + $caught = $ex; + } + + $this->assertEqual(true, $caught instanceof Exception); + } + +}