diff options
author | Robin Appelman <robin@icewind.nl> | 2017-06-15 13:59:06 +0200 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2017-06-15 13:59:06 +0200 |
commit | fa817599170e81b0eb28cb59446c32f0b5645f03 (patch) | |
tree | 62ec6b77ecff2bd91d74797b96f01c6b5cbab562 | |
parent | a74901fce17da6d88dbb82373fff523b834d692d (diff) | |
download | nextcloud-server-fa817599170e81b0eb28cb59446c32f0b5645f03.tar.gz nextcloud-server-fa817599170e81b0eb28cb59446c32f0b5645f03.zip |
fix moving folders out of a cache jail
Signed-off-by: Robin Appelman <robin@icewind.nl>
-rw-r--r-- | lib/private/Files/Cache/Wrapper/CacheJail.php | 12 | ||||
-rw-r--r-- | tests/lib/Files/Cache/Wrapper/CacheJailTest.php | 50 |
2 files changed, 61 insertions, 1 deletions
diff --git a/lib/private/Files/Cache/Wrapper/CacheJail.php b/lib/private/Files/Cache/Wrapper/CacheJail.php index ebab20fbaed..8f12ca77ee6 100644 --- a/lib/private/Files/Cache/Wrapper/CacheJail.php +++ b/lib/private/Files/Cache/Wrapper/CacheJail.php @@ -94,7 +94,7 @@ class CacheJail extends CacheWrapper { * get the stored metadata of a file or folder * * @param string /int $file - * @return array|false + * @return ICacheEntry|false */ public function get($file) { if (is_string($file) or $file == '') { @@ -176,6 +176,16 @@ class CacheJail extends CacheWrapper { } /** + * 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 */ public function clear() { diff --git a/tests/lib/Files/Cache/Wrapper/CacheJailTest.php b/tests/lib/Files/Cache/Wrapper/CacheJailTest.php index e3043c50d57..f26e3a59f1c 100644 --- a/tests/lib/Files/Cache/Wrapper/CacheJailTest.php +++ b/tests/lib/Files/Cache/Wrapper/CacheJailTest.php @@ -8,6 +8,7 @@ namespace Test\Files\Cache\Wrapper; +use OC\Files\Cache\Wrapper\CacheJail; use Test\Files\Cache\CacheTest; /** @@ -80,4 +81,53 @@ class CacheJailTest extends CacheTest { //not supported $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')); + } } |