fix moving folders out of a cache jail
Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
parent
701a865db7
commit
996269cfdd
|
@ -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 == '') {
|
||||
|
@ -175,6 +175,16 @@ class CacheJail extends CacheWrapper {
|
|||
$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
|
||||
*/
|
||||
|
|
|
@ -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'));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue