fix moving folders out of a cache jail

Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
Robin Appelman 2017-06-15 13:59:06 +02:00
parent 701a865db7
commit 996269cfdd
No known key found for this signature in database
GPG Key ID: CBCA68FBAEBF98C9
2 changed files with 61 additions and 1 deletions

View File

@ -94,7 +94,7 @@ class CacheJail extends CacheWrapper {
* get the stored metadata of a file or folder * get the stored metadata of a file or folder
* *
* @param string /int $file * @param string /int $file
* @return array|false * @return ICacheEntry|false
*/ */
public function get($file) { public function get($file) {
if (is_string($file) or $file == '') { if (is_string($file) or $file == '') {
@ -175,6 +175,16 @@ class CacheJail extends CacheWrapper {
$this->getCache()->move($this->getSourcePath($source), $this->getSourcePath($target)); $this->getCache()->move($this->getSourcePath($source), $this->getSourcePath($target));
} }
/**
* Get the storage id and path needed for a move
*
* @param string $path
* @return array [$storageId, $internalPath]
*/
protected function getMoveInfo($path) {
return [$this->getNumericStorageId(), $this->getSourcePath($path)];
}
/** /**
* remove all entries for files that are stored on the storage from the cache * remove all entries for files that are stored on the storage from the cache
*/ */

View File

@ -8,6 +8,7 @@
namespace Test\Files\Cache\Wrapper; namespace Test\Files\Cache\Wrapper;
use OC\Files\Cache\Wrapper\CacheJail;
use Test\Files\Cache\CacheTest; use Test\Files\Cache\CacheTest;
/** /**
@ -80,4 +81,53 @@ class CacheJailTest extends CacheTest {
//not supported //not supported
$this->assertTrue(true); $this->assertTrue(true);
} }
function testMoveFromJail() {
$folderData = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory');
$this->sourceCache->put('source', $folderData);
$this->sourceCache->put('source/foo', $folderData);
$this->sourceCache->put('source/foo/bar', $folderData);
$this->sourceCache->put('target', $folderData);
$jail = new CacheJail($this->sourceCache, 'source');
$this->sourceCache->moveFromCache($jail, 'foo', 'target/foo');
$this->assertTrue($this->sourceCache->inCache('target/foo'));
$this->assertTrue($this->sourceCache->inCache('target/foo/bar'));
}
function testMoveToJail() {
$folderData = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory');
$this->sourceCache->put('source', $folderData);
$this->sourceCache->put('source/foo', $folderData);
$this->sourceCache->put('source/foo/bar', $folderData);
$this->sourceCache->put('target', $folderData);
$jail = new CacheJail($this->sourceCache, 'target');
$jail->moveFromCache($this->sourceCache, 'source/foo', 'foo');
$this->assertTrue($this->sourceCache->inCache('target/foo'));
$this->assertTrue($this->sourceCache->inCache('target/foo/bar'));
}
function testMoveBetweenJail() {
$folderData = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory');
$this->sourceCache->put('source', $folderData);
$this->sourceCache->put('source/foo', $folderData);
$this->sourceCache->put('source/foo/bar', $folderData);
$this->sourceCache->put('target', $folderData);
$jail = new CacheJail($this->sourceCache, 'target');
$sourceJail = new CacheJail($this->sourceCache, 'source');
$jail->moveFromCache($sourceJail, 'foo', 'foo');
$this->assertTrue($this->sourceCache->inCache('target/foo'));
$this->assertTrue($this->sourceCache->inCache('target/foo/bar'));
}
} }