|
|
|
|
@ -25,6 +25,7 @@ use OCP\Share; |
|
|
|
|
use OCP\Util; |
|
|
|
|
use Test\TestMoveableMountPoint; |
|
|
|
|
use Test\HookHelper; |
|
|
|
|
use Test\Traits\UserTrait; |
|
|
|
|
|
|
|
|
|
class TemporaryNoTouch extends Temporary { |
|
|
|
|
public function touch($path, $mtime = null) { |
|
|
|
|
@ -60,10 +61,12 @@ class TemporaryNoLocal extends Temporary { |
|
|
|
|
* @package Test\Files |
|
|
|
|
*/ |
|
|
|
|
class ViewTest extends \Test\TestCase { |
|
|
|
|
use UserTrait; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @var \OC\Files\Storage\Storage[] $storages |
|
|
|
|
*/ |
|
|
|
|
private $storages = array(); |
|
|
|
|
private $storages = []; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @var string |
|
|
|
|
@ -138,9 +141,9 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$storage2 = $this->getTestStorage(); |
|
|
|
|
$storage3 = $this->getTestStorage(); |
|
|
|
|
$root = self::getUniqueID('/'); |
|
|
|
|
Filesystem::mount($storage1, array(), $root . '/'); |
|
|
|
|
Filesystem::mount($storage2, array(), $root . '/substorage'); |
|
|
|
|
Filesystem::mount($storage3, array(), $root . '/folder/anotherstorage'); |
|
|
|
|
Filesystem::mount($storage1, [], $root . '/'); |
|
|
|
|
Filesystem::mount($storage2, [], $root . '/substorage'); |
|
|
|
|
Filesystem::mount($storage3, [], $root . '/folder/anotherstorage'); |
|
|
|
|
$textSize = strlen("dummy file data\n"); |
|
|
|
|
$imageSize = filesize(\OC::$SERVERROOT . '/core/img/logo/logo.png'); |
|
|
|
|
$storageSize = $textSize * 2 + $imageSize; |
|
|
|
|
@ -204,13 +207,13 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
|
|
|
|
|
$cachedData = $rootView->getFileInfo('/foo.txt'); |
|
|
|
|
$this->assertFalse($cachedData['encrypted']); |
|
|
|
|
$id = $rootView->putFileInfo('/foo.txt', array('encrypted' => true)); |
|
|
|
|
$id = $rootView->putFileInfo('/foo.txt', ['encrypted' => true]); |
|
|
|
|
$cachedData = $rootView->getFileInfo('/foo.txt'); |
|
|
|
|
$this->assertTrue($cachedData['encrypted']); |
|
|
|
|
$this->assertEquals($cachedData['fileid'], $id); |
|
|
|
|
|
|
|
|
|
$this->assertFalse($rootView->getFileInfo('/non/existing')); |
|
|
|
|
$this->assertEquals(array(), $rootView->getDirectoryContent('/non/existing')); |
|
|
|
|
$this->assertEquals([], $rootView->getDirectoryContent('/non/existing')); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
@ -220,9 +223,9 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$storage1 = $this->getTestStorage(); |
|
|
|
|
$storage2 = $this->getTestStorage(); |
|
|
|
|
$storage3 = $this->getTestStorage(); |
|
|
|
|
Filesystem::mount($storage1, array(), '/'); |
|
|
|
|
Filesystem::mount($storage2, array(), '/substorage'); |
|
|
|
|
Filesystem::mount($storage3, array(), '/folder/anotherstorage'); |
|
|
|
|
Filesystem::mount($storage1, [], '/'); |
|
|
|
|
Filesystem::mount($storage2, [], '/substorage'); |
|
|
|
|
Filesystem::mount($storage3, [], '/folder/anotherstorage'); |
|
|
|
|
|
|
|
|
|
$rootView = new View(''); |
|
|
|
|
|
|
|
|
|
@ -262,8 +265,8 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$storage1 = $this->getTestStorage(false); |
|
|
|
|
$storage2 = $this->getTestStorage(); |
|
|
|
|
$storage1->mkdir('substorage'); |
|
|
|
|
Filesystem::mount($storage1, array(), '/'); |
|
|
|
|
Filesystem::mount($storage2, array(), '/substorage'); |
|
|
|
|
Filesystem::mount($storage1, [], '/'); |
|
|
|
|
Filesystem::mount($storage2, [], '/substorage'); |
|
|
|
|
|
|
|
|
|
$rootView = new View(''); |
|
|
|
|
$folderContent = $rootView->getDirectoryContent('/'); |
|
|
|
|
@ -292,8 +295,8 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
|
|
|
|
|
$storage1 = $this->getTestStorage(); |
|
|
|
|
$storage2 = $this->getTestStorage(); |
|
|
|
|
Filesystem::mount($storage1, array(), '/'); |
|
|
|
|
Filesystem::mount($storage2, array(), '/mount'); |
|
|
|
|
Filesystem::mount($storage1, [], '/'); |
|
|
|
|
Filesystem::mount($storage2, [], '/mount'); |
|
|
|
|
|
|
|
|
|
$view = new View('/'); |
|
|
|
|
|
|
|
|
|
@ -313,7 +316,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
public function testCacheIncompleteFolder() { |
|
|
|
|
$storage1 = $this->getTestStorage(false); |
|
|
|
|
Filesystem::clearMounts(); |
|
|
|
|
Filesystem::mount($storage1, array(), '/incomplete'); |
|
|
|
|
Filesystem::mount($storage1, [], '/incomplete'); |
|
|
|
|
$rootView = new View('/incomplete'); |
|
|
|
|
|
|
|
|
|
$entries = $rootView->getDirectoryContent('/'); |
|
|
|
|
@ -327,8 +330,8 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
public function testAutoScan() { |
|
|
|
|
$storage1 = $this->getTestStorage(false); |
|
|
|
|
$storage2 = $this->getTestStorage(false); |
|
|
|
|
Filesystem::mount($storage1, array(), '/'); |
|
|
|
|
Filesystem::mount($storage2, array(), '/substorage'); |
|
|
|
|
Filesystem::mount($storage1, [], '/'); |
|
|
|
|
Filesystem::mount($storage2, [], '/substorage'); |
|
|
|
|
$textSize = strlen("dummy file data\n"); |
|
|
|
|
|
|
|
|
|
$rootView = new View(''); |
|
|
|
|
@ -349,15 +352,15 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$storage1 = $this->getTestStorage(); |
|
|
|
|
$storage2 = $this->getTestStorage(); |
|
|
|
|
$storage3 = $this->getTestStorage(); |
|
|
|
|
Filesystem::mount($storage1, array(), '/'); |
|
|
|
|
Filesystem::mount($storage2, array(), '/substorage'); |
|
|
|
|
Filesystem::mount($storage3, array(), '/folder/anotherstorage'); |
|
|
|
|
Filesystem::mount($storage1, [], '/'); |
|
|
|
|
Filesystem::mount($storage2, [], '/substorage'); |
|
|
|
|
Filesystem::mount($storage3, [], '/folder/anotherstorage'); |
|
|
|
|
|
|
|
|
|
$rootView = new View(''); |
|
|
|
|
|
|
|
|
|
$results = $rootView->search('foo'); |
|
|
|
|
$this->assertCount(6, $results); |
|
|
|
|
$paths = array(); |
|
|
|
|
$paths = []; |
|
|
|
|
foreach ($results as $result) { |
|
|
|
|
$this->assertEquals($result['path'], Filesystem::normalizePath($result['path'])); |
|
|
|
|
$paths[] = $result['path']; |
|
|
|
|
@ -372,7 +375,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$folderView = new View('/folder'); |
|
|
|
|
$results = $folderView->search('bar'); |
|
|
|
|
$this->assertCount(2, $results); |
|
|
|
|
$paths = array(); |
|
|
|
|
$paths = []; |
|
|
|
|
foreach ($results as $result) { |
|
|
|
|
$paths[] = $result['path']; |
|
|
|
|
} |
|
|
|
|
@ -381,7 +384,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
|
|
|
|
|
$results = $folderView->search('foo'); |
|
|
|
|
$this->assertCount(2, $results); |
|
|
|
|
$paths = array(); |
|
|
|
|
$paths = []; |
|
|
|
|
foreach ($results as $result) { |
|
|
|
|
$paths[] = $result['path']; |
|
|
|
|
} |
|
|
|
|
@ -397,7 +400,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
*/ |
|
|
|
|
public function testWatcher() { |
|
|
|
|
$storage1 = $this->getTestStorage(); |
|
|
|
|
Filesystem::mount($storage1, array(), '/'); |
|
|
|
|
Filesystem::mount($storage1, [], '/'); |
|
|
|
|
$storage1->getWatcher()->setPolicy(Watcher::CHECK_ALWAYS); |
|
|
|
|
|
|
|
|
|
$rootView = new View(''); |
|
|
|
|
@ -405,7 +408,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$cachedData = $rootView->getFileInfo('foo.txt'); |
|
|
|
|
$this->assertEquals(16, $cachedData['size']); |
|
|
|
|
|
|
|
|
|
$rootView->putFileInfo('foo.txt', array('storage_mtime' => 10)); |
|
|
|
|
$rootView->putFileInfo('foo.txt', ['storage_mtime' => 10]); |
|
|
|
|
$storage1->file_put_contents('foo.txt', 'foo'); |
|
|
|
|
clearstatcache(); |
|
|
|
|
|
|
|
|
|
@ -441,8 +444,8 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function copyBetweenStorages($storage1, $storage2) { |
|
|
|
|
Filesystem::mount($storage1, array(), '/'); |
|
|
|
|
Filesystem::mount($storage2, array(), '/substorage'); |
|
|
|
|
Filesystem::mount($storage1, [], '/'); |
|
|
|
|
Filesystem::mount($storage2, [], '/substorage'); |
|
|
|
|
|
|
|
|
|
$rootView = new View(''); |
|
|
|
|
$rootView->mkdir('substorage/emptyfolder'); |
|
|
|
|
@ -487,8 +490,8 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function moveBetweenStorages($storage1, $storage2) { |
|
|
|
|
Filesystem::mount($storage1, array(), '/'); |
|
|
|
|
Filesystem::mount($storage2, array(), '/substorage'); |
|
|
|
|
Filesystem::mount($storage1, [], '/'); |
|
|
|
|
Filesystem::mount($storage2, [], '/substorage'); |
|
|
|
|
|
|
|
|
|
$rootView = new View(''); |
|
|
|
|
$rootView->rename('foo.txt', 'substorage/folder/foo.txt'); |
|
|
|
|
@ -506,8 +509,8 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
public function testUnlink() { |
|
|
|
|
$storage1 = $this->getTestStorage(); |
|
|
|
|
$storage2 = $this->getTestStorage(); |
|
|
|
|
Filesystem::mount($storage1, array(), '/'); |
|
|
|
|
Filesystem::mount($storage2, array(), '/substorage'); |
|
|
|
|
Filesystem::mount($storage1, [], '/'); |
|
|
|
|
Filesystem::mount($storage2, [], '/substorage'); |
|
|
|
|
|
|
|
|
|
$rootView = new View(''); |
|
|
|
|
$rootView->file_put_contents('/foo.txt', 'asd'); |
|
|
|
|
@ -552,8 +555,8 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
public function testUnlinkRootMustFail() { |
|
|
|
|
$storage1 = $this->getTestStorage(); |
|
|
|
|
$storage2 = $this->getTestStorage(); |
|
|
|
|
Filesystem::mount($storage1, array(), '/'); |
|
|
|
|
Filesystem::mount($storage2, array(), '/substorage'); |
|
|
|
|
Filesystem::mount($storage1, [], '/'); |
|
|
|
|
Filesystem::mount($storage2, [], '/substorage'); |
|
|
|
|
|
|
|
|
|
$rootView = new View(''); |
|
|
|
|
$rootView->file_put_contents('/foo.txt', 'asd'); |
|
|
|
|
@ -571,7 +574,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
public function testTouch() { |
|
|
|
|
$storage = $this->getTestStorage(true, TemporaryNoTouch::class); |
|
|
|
|
|
|
|
|
|
Filesystem::mount($storage, array(), '/'); |
|
|
|
|
Filesystem::mount($storage, [], '/'); |
|
|
|
|
|
|
|
|
|
$rootView = new View(''); |
|
|
|
|
$oldCachedData = $rootView->getFileInfo('foo.txt'); |
|
|
|
|
@ -582,7 +585,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$this->assertEquals(500, $cachedData['mtime']); |
|
|
|
|
$this->assertEquals($oldCachedData['storage_mtime'], $cachedData['storage_mtime']); |
|
|
|
|
|
|
|
|
|
$rootView->putFileInfo('foo.txt', array('storage_mtime' => 1000)); //make sure the watcher detects the change |
|
|
|
|
$rootView->putFileInfo('foo.txt', ['storage_mtime' => 1000]); //make sure the watcher detects the change |
|
|
|
|
$rootView->file_put_contents('foo.txt', 'asd'); |
|
|
|
|
$cachedData = $rootView->getFileInfo('foo.txt'); |
|
|
|
|
$this->assertGreaterThanOrEqual($oldCachedData['mtime'], $cachedData['mtime']); |
|
|
|
|
@ -595,7 +598,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
public function testTouchFloat() { |
|
|
|
|
$storage = $this->getTestStorage(true, TemporaryNoTouch::class); |
|
|
|
|
|
|
|
|
|
Filesystem::mount($storage, array(), '/'); |
|
|
|
|
Filesystem::mount($storage, [], '/'); |
|
|
|
|
|
|
|
|
|
$rootView = new View(''); |
|
|
|
|
$oldCachedData = $rootView->getFileInfo('foo.txt'); |
|
|
|
|
@ -613,8 +616,8 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$storage1 = $this->getTestStorage(); |
|
|
|
|
$storage2 = $this->getTestStorage(); |
|
|
|
|
$defaultRoot = Filesystem::getRoot(); |
|
|
|
|
Filesystem::mount($storage1, array(), '/'); |
|
|
|
|
Filesystem::mount($storage2, array(), $defaultRoot . '/substorage'); |
|
|
|
|
Filesystem::mount($storage1, [], '/'); |
|
|
|
|
Filesystem::mount($storage2, [], $defaultRoot . '/substorage'); |
|
|
|
|
\OC_Hook::connect('OC_Filesystem', 'post_write', $this, 'dummyHook'); |
|
|
|
|
|
|
|
|
|
$rootView = new View(''); |
|
|
|
|
@ -636,7 +639,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
|
|
|
|
|
public function testSearchNotOutsideView() { |
|
|
|
|
$storage1 = $this->getTestStorage(); |
|
|
|
|
Filesystem::mount($storage1, array(), '/'); |
|
|
|
|
Filesystem::mount($storage1, [], '/'); |
|
|
|
|
$storage1->rename('folder', 'foo'); |
|
|
|
|
$scanner = $storage1->getScanner(); |
|
|
|
|
$scanner->scan(''); |
|
|
|
|
@ -656,7 +659,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
/** |
|
|
|
|
* @var \OC\Files\Storage\Storage $storage |
|
|
|
|
*/ |
|
|
|
|
$storage = new $class(array()); |
|
|
|
|
$storage = new $class([]); |
|
|
|
|
$textData = "dummy file data\n"; |
|
|
|
|
$imgData = file_get_contents(\OC::$SERVERROOT . '/core/img/logo/logo.png'); |
|
|
|
|
$storage->mkdir('folder'); |
|
|
|
|
@ -679,8 +682,8 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$storage1 = $this->getTestStorage(); |
|
|
|
|
$storage2 = $this->getTestStorage(); |
|
|
|
|
$defaultRoot = Filesystem::getRoot(); |
|
|
|
|
Filesystem::mount($storage1, array(), '/'); |
|
|
|
|
Filesystem::mount($storage2, array(), $defaultRoot . '_substorage'); |
|
|
|
|
Filesystem::mount($storage1, [], '/'); |
|
|
|
|
Filesystem::mount($storage2, [], $defaultRoot . '_substorage'); |
|
|
|
|
\OC_Hook::connect('OC_Filesystem', 'post_write', $this, 'dummyHook'); |
|
|
|
|
|
|
|
|
|
$subView = new View($defaultRoot . '_substorage'); |
|
|
|
|
@ -710,8 +713,8 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$storage1 = $this->getTestStorage(); |
|
|
|
|
$storage2 = $this->getTestStorage(); |
|
|
|
|
$defaultRoot = Filesystem::getRoot(); |
|
|
|
|
Filesystem::mount($storage1, array(), '/'); |
|
|
|
|
Filesystem::mount($storage2, array(), $defaultRoot); |
|
|
|
|
Filesystem::mount($storage1, [], '/'); |
|
|
|
|
Filesystem::mount($storage2, [], $defaultRoot); |
|
|
|
|
\OC_Hook::connect('OC_Filesystem', 'post_create', $this, 'dummyHookCreate'); |
|
|
|
|
\OC_Hook::connect('OC_Filesystem', 'post_update', $this, 'dummyHookUpdate'); |
|
|
|
|
\OC_Hook::connect('OC_Filesystem', 'post_write', $this, 'dummyHookWrite'); |
|
|
|
|
@ -741,7 +744,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
*/ |
|
|
|
|
public function testResolvePath($expected, $pathToTest) { |
|
|
|
|
$storage1 = $this->getTestStorage(); |
|
|
|
|
Filesystem::mount($storage1, array(), '/'); |
|
|
|
|
Filesystem::mount($storage1, [], '/'); |
|
|
|
|
|
|
|
|
|
$view = new View(''); |
|
|
|
|
|
|
|
|
|
@ -756,25 +759,25 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function resolvePathTestProvider() { |
|
|
|
|
return array( |
|
|
|
|
array('foo.txt', 'foo.txt'), |
|
|
|
|
array('foo.txt', '/foo.txt'), |
|
|
|
|
array('folder', 'folder'), |
|
|
|
|
array('folder', '/folder'), |
|
|
|
|
array('folder', 'folder/'), |
|
|
|
|
array('folder', '/folder/'), |
|
|
|
|
array('folder/bar.txt', 'folder/bar.txt'), |
|
|
|
|
array('folder/bar.txt', '/folder/bar.txt'), |
|
|
|
|
array('', ''), |
|
|
|
|
array('', '/'), |
|
|
|
|
); |
|
|
|
|
return [ |
|
|
|
|
['foo.txt', 'foo.txt'], |
|
|
|
|
['foo.txt', '/foo.txt'], |
|
|
|
|
['folder', 'folder'], |
|
|
|
|
['folder', '/folder'], |
|
|
|
|
['folder', 'folder/'], |
|
|
|
|
['folder', '/folder/'], |
|
|
|
|
['folder/bar.txt', 'folder/bar.txt'], |
|
|
|
|
['folder/bar.txt', '/folder/bar.txt'], |
|
|
|
|
['', ''], |
|
|
|
|
['', '/'], |
|
|
|
|
]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testUTF8Names() { |
|
|
|
|
$names = array('虚', '和知しゃ和で', 'regular ascii', 'sɨˈrɪlɪk', 'ѨѬ', 'أنا أحب القراءة كثيرا'); |
|
|
|
|
$names = ['虚', '和知しゃ和で', 'regular ascii', 'sɨˈrɪlɪk', 'ѨѬ', 'أنا أحب القراءة كثيرا']; |
|
|
|
|
|
|
|
|
|
$storage = new Temporary(array()); |
|
|
|
|
Filesystem::mount($storage, array(), '/'); |
|
|
|
|
$storage = new Temporary([]); |
|
|
|
|
Filesystem::mount($storage, [], '/'); |
|
|
|
|
|
|
|
|
|
$rootView = new View(''); |
|
|
|
|
foreach ($names as $name) { |
|
|
|
|
@ -802,8 +805,8 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
|
|
|
|
|
public function xtestLongPath() { |
|
|
|
|
|
|
|
|
|
$storage = new Temporary(array()); |
|
|
|
|
Filesystem::mount($storage, array(), '/'); |
|
|
|
|
$storage = new Temporary([]); |
|
|
|
|
Filesystem::mount($storage, [], '/'); |
|
|
|
|
|
|
|
|
|
$rootView = new View(''); |
|
|
|
|
|
|
|
|
|
@ -851,9 +854,9 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testTouchNotSupported() { |
|
|
|
|
$storage = new TemporaryNoTouch(array()); |
|
|
|
|
$storage = new TemporaryNoTouch([]); |
|
|
|
|
$scanner = $storage->getScanner(); |
|
|
|
|
Filesystem::mount($storage, array(), '/test/'); |
|
|
|
|
Filesystem::mount($storage, [], '/test/'); |
|
|
|
|
$past = time() - 100; |
|
|
|
|
$storage->file_put_contents('test', 'foobar'); |
|
|
|
|
$scanner->scan(''); |
|
|
|
|
@ -868,13 +871,13 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testWatcherEtagCrossStorage() { |
|
|
|
|
$storage1 = new Temporary(array()); |
|
|
|
|
$storage2 = new Temporary(array()); |
|
|
|
|
$storage1 = new Temporary([]); |
|
|
|
|
$storage2 = new Temporary([]); |
|
|
|
|
$scanner1 = $storage1->getScanner(); |
|
|
|
|
$scanner2 = $storage2->getScanner(); |
|
|
|
|
$storage1->mkdir('sub'); |
|
|
|
|
Filesystem::mount($storage1, array(), '/test/'); |
|
|
|
|
Filesystem::mount($storage2, array(), '/test/sub/storage'); |
|
|
|
|
Filesystem::mount($storage1, [], '/test/'); |
|
|
|
|
Filesystem::mount($storage2, [], '/test/sub/storage'); |
|
|
|
|
|
|
|
|
|
$past = time() - 100; |
|
|
|
|
$storage2->file_put_contents('test.txt', 'foobar'); |
|
|
|
|
@ -887,9 +890,9 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$oldFileInfo = $view->getFileInfo('/test/sub/storage/test.txt'); |
|
|
|
|
$oldFolderInfo = $view->getFileInfo('/test'); |
|
|
|
|
|
|
|
|
|
$storage2->getCache()->update($oldFileInfo->getId(), array( |
|
|
|
|
'storage_mtime' => $past |
|
|
|
|
)); |
|
|
|
|
$storage2->getCache()->update($oldFileInfo->getId(), [ |
|
|
|
|
'storage_mtime' => $past, |
|
|
|
|
]); |
|
|
|
|
|
|
|
|
|
$oldEtag = $oldFolderInfo->getEtag(); |
|
|
|
|
|
|
|
|
|
@ -908,9 +911,9 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testPartFileInfo() { |
|
|
|
|
$storage = new Temporary(array()); |
|
|
|
|
$storage = new Temporary([]); |
|
|
|
|
$scanner = $storage->getScanner(); |
|
|
|
|
Filesystem::mount($storage, array(), '/test/'); |
|
|
|
|
Filesystem::mount($storage, [], '/test/'); |
|
|
|
|
$storage->file_put_contents('test.part', 'foobar'); |
|
|
|
|
$scanner->scan(''); |
|
|
|
|
$view = new View('/test'); |
|
|
|
|
@ -922,15 +925,15 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function absolutePathProvider() { |
|
|
|
|
return array( |
|
|
|
|
array('/files/', ''), |
|
|
|
|
array('/files/0', '0'), |
|
|
|
|
array('/files/false', 'false'), |
|
|
|
|
array('/files/true', 'true'), |
|
|
|
|
array('/files/', '/'), |
|
|
|
|
array('/files/test', 'test'), |
|
|
|
|
array('/files/test', '/test'), |
|
|
|
|
); |
|
|
|
|
return [ |
|
|
|
|
['/files/', ''], |
|
|
|
|
['/files/0', '0'], |
|
|
|
|
['/files/false', 'false'], |
|
|
|
|
['/files/true', 'true'], |
|
|
|
|
['/files/', '/'], |
|
|
|
|
['/files/test', 'test'], |
|
|
|
|
['/files/test', '/test'], |
|
|
|
|
]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
@ -959,81 +962,81 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function relativePathProvider($missingRootExpectedPath) { |
|
|
|
|
return array( |
|
|
|
|
return [ |
|
|
|
|
// No root - returns the path |
|
|
|
|
array('', '/files', '/files'), |
|
|
|
|
array('', '/files/', '/files/'), |
|
|
|
|
['', '/files', '/files'], |
|
|
|
|
['', '/files/', '/files/'], |
|
|
|
|
|
|
|
|
|
// Root equals path - / |
|
|
|
|
array('/files/', '/files/', '/'), |
|
|
|
|
array('/files/', '/files', '/'), |
|
|
|
|
array('/files', '/files/', '/'), |
|
|
|
|
array('/files', '/files', '/'), |
|
|
|
|
['/files/', '/files/', '/'], |
|
|
|
|
['/files/', '/files', '/'], |
|
|
|
|
['/files', '/files/', '/'], |
|
|
|
|
['/files', '/files', '/'], |
|
|
|
|
|
|
|
|
|
// False negatives: chroot fixes those by adding the leading slash. |
|
|
|
|
// But setting them up with this root (instead of chroot($root)) |
|
|
|
|
// will fail them, although they should be the same. |
|
|
|
|
// TODO init should be fixed, so it also adds the leading slash |
|
|
|
|
array('files/', '/files/', $missingRootExpectedPath), |
|
|
|
|
array('files', '/files/', $missingRootExpectedPath), |
|
|
|
|
array('files/', '/files', $missingRootExpectedPath), |
|
|
|
|
array('files', '/files', $missingRootExpectedPath), |
|
|
|
|
['files/', '/files/', $missingRootExpectedPath], |
|
|
|
|
['files', '/files/', $missingRootExpectedPath], |
|
|
|
|
['files/', '/files', $missingRootExpectedPath], |
|
|
|
|
['files', '/files', $missingRootExpectedPath], |
|
|
|
|
|
|
|
|
|
// False negatives: Paths provided to the method should have a leading slash |
|
|
|
|
// TODO input should be checked to have a leading slash |
|
|
|
|
array('/files/', 'files/', null), |
|
|
|
|
array('/files', 'files/', null), |
|
|
|
|
array('/files/', 'files', null), |
|
|
|
|
array('/files', 'files', null), |
|
|
|
|
['/files/', 'files/', null], |
|
|
|
|
['/files', 'files/', null], |
|
|
|
|
['/files/', 'files', null], |
|
|
|
|
['/files', 'files', null], |
|
|
|
|
|
|
|
|
|
// with trailing slashes |
|
|
|
|
array('/files/', '/files/0', '0'), |
|
|
|
|
array('/files/', '/files/false', 'false'), |
|
|
|
|
array('/files/', '/files/true', 'true'), |
|
|
|
|
array('/files/', '/files/test', 'test'), |
|
|
|
|
array('/files/', '/files/test/foo', 'test/foo'), |
|
|
|
|
['/files/', '/files/0', '0'], |
|
|
|
|
['/files/', '/files/false', 'false'], |
|
|
|
|
['/files/', '/files/true', 'true'], |
|
|
|
|
['/files/', '/files/test', 'test'], |
|
|
|
|
['/files/', '/files/test/foo', 'test/foo'], |
|
|
|
|
|
|
|
|
|
// without trailing slashes |
|
|
|
|
// TODO false expectation: Should match "with trailing slashes" |
|
|
|
|
array('/files', '/files/0', '/0'), |
|
|
|
|
array('/files', '/files/false', '/false'), |
|
|
|
|
array('/files', '/files/true', '/true'), |
|
|
|
|
array('/files', '/files/test', '/test'), |
|
|
|
|
array('/files', '/files/test/foo', '/test/foo'), |
|
|
|
|
['/files', '/files/0', '/0'], |
|
|
|
|
['/files', '/files/false', '/false'], |
|
|
|
|
['/files', '/files/true', '/true'], |
|
|
|
|
['/files', '/files/test', '/test'], |
|
|
|
|
['/files', '/files/test/foo', '/test/foo'], |
|
|
|
|
|
|
|
|
|
// leading slashes |
|
|
|
|
array('/files/', '/files_trashbin/', null), |
|
|
|
|
array('/files', '/files_trashbin/', null), |
|
|
|
|
array('/files/', '/files_trashbin', null), |
|
|
|
|
array('/files', '/files_trashbin', null), |
|
|
|
|
['/files/', '/files_trashbin/', null], |
|
|
|
|
['/files', '/files_trashbin/', null], |
|
|
|
|
['/files/', '/files_trashbin', null], |
|
|
|
|
['/files', '/files_trashbin', null], |
|
|
|
|
|
|
|
|
|
// no leading slashes |
|
|
|
|
array('files/', 'files_trashbin/', null), |
|
|
|
|
array('files', 'files_trashbin/', null), |
|
|
|
|
array('files/', 'files_trashbin', null), |
|
|
|
|
array('files', 'files_trashbin', null), |
|
|
|
|
['files/', 'files_trashbin/', null], |
|
|
|
|
['files', 'files_trashbin/', null], |
|
|
|
|
['files/', 'files_trashbin', null], |
|
|
|
|
['files', 'files_trashbin', null], |
|
|
|
|
|
|
|
|
|
// mixed leading slashes |
|
|
|
|
array('files/', '/files_trashbin/', null), |
|
|
|
|
array('/files/', 'files_trashbin/', null), |
|
|
|
|
array('files', '/files_trashbin/', null), |
|
|
|
|
array('/files', 'files_trashbin/', null), |
|
|
|
|
array('files/', '/files_trashbin', null), |
|
|
|
|
array('/files/', 'files_trashbin', null), |
|
|
|
|
array('files', '/files_trashbin', null), |
|
|
|
|
array('/files', 'files_trashbin', null), |
|
|
|
|
|
|
|
|
|
array('files', 'files_trashbin/test', null), |
|
|
|
|
array('/files', '/files_trashbin/test', null), |
|
|
|
|
array('/files', 'files_trashbin/test', null), |
|
|
|
|
); |
|
|
|
|
['files/', '/files_trashbin/', null], |
|
|
|
|
['/files/', 'files_trashbin/', null], |
|
|
|
|
['files', '/files_trashbin/', null], |
|
|
|
|
['/files', 'files_trashbin/', null], |
|
|
|
|
['files/', '/files_trashbin', null], |
|
|
|
|
['/files/', 'files_trashbin', null], |
|
|
|
|
['files', '/files_trashbin', null], |
|
|
|
|
['/files', 'files_trashbin', null], |
|
|
|
|
|
|
|
|
|
['files', 'files_trashbin/test', null], |
|
|
|
|
['/files', '/files_trashbin/test', null], |
|
|
|
|
['/files', 'files_trashbin/test', null], |
|
|
|
|
]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testFileView() { |
|
|
|
|
$storage = new Temporary(array()); |
|
|
|
|
$storage = new Temporary([]); |
|
|
|
|
$scanner = $storage->getScanner(); |
|
|
|
|
$storage->file_put_contents('foo.txt', 'bar'); |
|
|
|
|
Filesystem::mount($storage, array(), '/test/'); |
|
|
|
|
Filesystem::mount($storage, [], '/test/'); |
|
|
|
|
$scanner->scan(''); |
|
|
|
|
$view = new View('/test/foo.txt'); |
|
|
|
|
|
|
|
|
|
@ -1059,9 +1062,9 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$longPath .= '/' . $folderName; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$storage = new Temporary(array()); |
|
|
|
|
$storage = new Temporary([]); |
|
|
|
|
$this->tempStorage = $storage; // for later hard cleanup |
|
|
|
|
Filesystem::mount($storage, array(), '/'); |
|
|
|
|
Filesystem::mount($storage, [], '/'); |
|
|
|
|
|
|
|
|
|
$rootView = new View(''); |
|
|
|
|
|
|
|
|
|
@ -1074,64 +1077,64 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$longPath = 'md5'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
call_user_func(array($rootView, $operation), $longPath, $param0); |
|
|
|
|
call_user_func([$rootView, $operation], $longPath, $param0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function tooLongPathDataProvider() { |
|
|
|
|
return array( |
|
|
|
|
array('getAbsolutePath'), |
|
|
|
|
array('getRelativePath'), |
|
|
|
|
array('getMountPoint'), |
|
|
|
|
array('resolvePath'), |
|
|
|
|
array('getLocalFile'), |
|
|
|
|
array('getLocalFolder'), |
|
|
|
|
array('mkdir'), |
|
|
|
|
array('rmdir'), |
|
|
|
|
array('opendir'), |
|
|
|
|
array('is_dir'), |
|
|
|
|
array('is_file'), |
|
|
|
|
array('stat'), |
|
|
|
|
array('filetype'), |
|
|
|
|
array('filesize'), |
|
|
|
|
array('readfile'), |
|
|
|
|
array('isCreatable'), |
|
|
|
|
array('isReadable'), |
|
|
|
|
array('isUpdatable'), |
|
|
|
|
array('isDeletable'), |
|
|
|
|
array('isSharable'), |
|
|
|
|
array('file_exists'), |
|
|
|
|
array('filemtime'), |
|
|
|
|
array('touch'), |
|
|
|
|
array('file_get_contents'), |
|
|
|
|
array('unlink'), |
|
|
|
|
array('deleteAll'), |
|
|
|
|
array('toTmpFile'), |
|
|
|
|
array('getMimeType'), |
|
|
|
|
array('free_space'), |
|
|
|
|
array('getFileInfo'), |
|
|
|
|
array('getDirectoryContent'), |
|
|
|
|
array('getOwner'), |
|
|
|
|
array('getETag'), |
|
|
|
|
array('file_put_contents', 'ipsum'), |
|
|
|
|
array('rename', '@0'), |
|
|
|
|
array('copy', '@0'), |
|
|
|
|
array('fopen', 'r'), |
|
|
|
|
array('fromTmpFile', '@0'), |
|
|
|
|
array('hash'), |
|
|
|
|
array('hasUpdated', 0), |
|
|
|
|
array('putFileInfo', array()), |
|
|
|
|
); |
|
|
|
|
return [ |
|
|
|
|
['getAbsolutePath'], |
|
|
|
|
['getRelativePath'], |
|
|
|
|
['getMountPoint'], |
|
|
|
|
['resolvePath'], |
|
|
|
|
['getLocalFile'], |
|
|
|
|
['getLocalFolder'], |
|
|
|
|
['mkdir'], |
|
|
|
|
['rmdir'], |
|
|
|
|
['opendir'], |
|
|
|
|
['is_dir'], |
|
|
|
|
['is_file'], |
|
|
|
|
['stat'], |
|
|
|
|
['filetype'], |
|
|
|
|
['filesize'], |
|
|
|
|
['readfile'], |
|
|
|
|
['isCreatable'], |
|
|
|
|
['isReadable'], |
|
|
|
|
['isUpdatable'], |
|
|
|
|
['isDeletable'], |
|
|
|
|
['isSharable'], |
|
|
|
|
['file_exists'], |
|
|
|
|
['filemtime'], |
|
|
|
|
['touch'], |
|
|
|
|
['file_get_contents'], |
|
|
|
|
['unlink'], |
|
|
|
|
['deleteAll'], |
|
|
|
|
['toTmpFile'], |
|
|
|
|
['getMimeType'], |
|
|
|
|
['free_space'], |
|
|
|
|
['getFileInfo'], |
|
|
|
|
['getDirectoryContent'], |
|
|
|
|
['getOwner'], |
|
|
|
|
['getETag'], |
|
|
|
|
['file_put_contents', 'ipsum'], |
|
|
|
|
['rename', '@0'], |
|
|
|
|
['copy', '@0'], |
|
|
|
|
['fopen', 'r'], |
|
|
|
|
['fromTmpFile', '@0'], |
|
|
|
|
['hash'], |
|
|
|
|
['hasUpdated', 0], |
|
|
|
|
['putFileInfo', []], |
|
|
|
|
]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testRenameCrossStoragePreserveMtime() { |
|
|
|
|
$storage1 = new Temporary(array()); |
|
|
|
|
$storage2 = new Temporary(array()); |
|
|
|
|
$storage1 = new Temporary([]); |
|
|
|
|
$storage2 = new Temporary([]); |
|
|
|
|
$storage1->mkdir('sub'); |
|
|
|
|
$storage1->mkdir('foo'); |
|
|
|
|
$storage1->file_put_contents('foo.txt', 'asd'); |
|
|
|
|
$storage1->file_put_contents('foo/bar.txt', 'asd'); |
|
|
|
|
Filesystem::mount($storage1, array(), '/test/'); |
|
|
|
|
Filesystem::mount($storage2, array(), '/test/sub/storage'); |
|
|
|
|
Filesystem::mount($storage1, [], '/test/'); |
|
|
|
|
Filesystem::mount($storage2, [], '/test/sub/storage'); |
|
|
|
|
|
|
|
|
|
$view = new View(''); |
|
|
|
|
$time = time() - 200; |
|
|
|
|
@ -1157,7 +1160,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private function doTestCopyRenameFail($operation) { |
|
|
|
|
$storage1 = new Temporary(array()); |
|
|
|
|
$storage1 = new Temporary([]); |
|
|
|
|
/** @var \PHPUnit_Framework_MockObject_MockObject|Temporary $storage2 */ |
|
|
|
|
$storage2 = $this->getMockBuilder(TemporaryNoCross::class) |
|
|
|
|
->setConstructorArgs([[]]) |
|
|
|
|
@ -1180,8 +1183,8 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$storage2->file_put_contents('existing.txt', '0123'); |
|
|
|
|
$storage1->getScanner()->scan(''); |
|
|
|
|
$storage2->getScanner()->scan(''); |
|
|
|
|
Filesystem::mount($storage1, array(), '/test/'); |
|
|
|
|
Filesystem::mount($storage2, array(), '/test/sub/storage'); |
|
|
|
|
Filesystem::mount($storage1, [], '/test/'); |
|
|
|
|
Filesystem::mount($storage2, [], '/test/sub/storage'); |
|
|
|
|
|
|
|
|
|
// move file |
|
|
|
|
$view = new View(''); |
|
|
|
|
@ -1212,8 +1215,8 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
public function testDeleteFailKeepCache() { |
|
|
|
|
/** @var Temporary|\PHPUnit_Framework_MockObject_MockObject $storage */ |
|
|
|
|
$storage = $this->getMockBuilder(Temporary::class) |
|
|
|
|
->setConstructorArgs(array(array())) |
|
|
|
|
->setMethods(array('unlink')) |
|
|
|
|
->setConstructorArgs([[]]) |
|
|
|
|
->setMethods(['unlink']) |
|
|
|
|
->getMock(); |
|
|
|
|
$storage->expects($this->once()) |
|
|
|
|
->method('unlink') |
|
|
|
|
@ -1222,7 +1225,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$cache = $storage->getCache(); |
|
|
|
|
$storage->file_put_contents('foo.txt', 'asd'); |
|
|
|
|
$scanner->scan(''); |
|
|
|
|
Filesystem::mount($storage, array(), '/test/'); |
|
|
|
|
Filesystem::mount($storage, [], '/test/'); |
|
|
|
|
|
|
|
|
|
$view = new View('/test'); |
|
|
|
|
|
|
|
|
|
@ -1248,14 +1251,14 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testRenameOverWrite() { |
|
|
|
|
$storage = new Temporary(array()); |
|
|
|
|
$storage = new Temporary([]); |
|
|
|
|
$scanner = $storage->getScanner(); |
|
|
|
|
$storage->mkdir('sub'); |
|
|
|
|
$storage->mkdir('foo'); |
|
|
|
|
$storage->file_put_contents('foo.txt', 'asd'); |
|
|
|
|
$storage->file_put_contents('foo/bar.txt', 'asd'); |
|
|
|
|
$scanner->scan(''); |
|
|
|
|
Filesystem::mount($storage, array(), '/test/'); |
|
|
|
|
Filesystem::mount($storage, [], '/test/'); |
|
|
|
|
$view = new View(''); |
|
|
|
|
$this->assertTrue($view->rename('/test/foo.txt', '/test/foo/bar.txt')); |
|
|
|
|
} |
|
|
|
|
@ -1309,7 +1312,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$pathPrefix = str_replace('{folder}', 'files', $pathPrefix); |
|
|
|
|
|
|
|
|
|
$view = new View($rootPath); |
|
|
|
|
$storage = new Temporary(array()); |
|
|
|
|
$storage = new Temporary([]); |
|
|
|
|
Filesystem::mount($storage, [], '/'); |
|
|
|
|
$this->assertTrue($view->lockFile($pathPrefix . '/foo/bar', ILockingProvider::LOCK_EXCLUSIVE)); |
|
|
|
|
$view->lockFile($pathPrefix . '/foo/bar/asd', ILockingProvider::LOCK_SHARED); |
|
|
|
|
@ -1328,7 +1331,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$pathPrefix = str_replace('{folder}', 'files_encryption', $pathPrefix); |
|
|
|
|
|
|
|
|
|
$view = new View($rootPath); |
|
|
|
|
$storage = new Temporary(array()); |
|
|
|
|
$storage = new Temporary([]); |
|
|
|
|
Filesystem::mount($storage, [], '/'); |
|
|
|
|
$this->assertFalse($view->lockFile($pathPrefix . '/foo/bar', ILockingProvider::LOCK_EXCLUSIVE)); |
|
|
|
|
$this->assertFalse($view->lockFile($pathPrefix . '/foo/bar/asd', ILockingProvider::LOCK_SHARED)); |
|
|
|
|
@ -1349,7 +1352,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$pathPrefix = str_replace('{folder}', 'files', $pathPrefix); |
|
|
|
|
|
|
|
|
|
$view = new View($rootPath); |
|
|
|
|
$storage = new Temporary(array()); |
|
|
|
|
$storage = new Temporary([]); |
|
|
|
|
Filesystem::mount($storage, [], '/'); |
|
|
|
|
$this->assertTrue($view->lockFile($pathPrefix . '/foo/bar', ILockingProvider::LOCK_SHARED)); |
|
|
|
|
$view->lockFile($pathPrefix . '/foo/bar', ILockingProvider::LOCK_EXCLUSIVE); |
|
|
|
|
@ -1368,7 +1371,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$pathPrefix = str_replace('{folder}', 'files_encryption', $pathPrefix); |
|
|
|
|
|
|
|
|
|
$view = new View($rootPath); |
|
|
|
|
$storage = new Temporary(array()); |
|
|
|
|
$storage = new Temporary([]); |
|
|
|
|
Filesystem::mount($storage, [], '/'); |
|
|
|
|
$this->assertFalse($view->lockFile($pathPrefix . '/foo/bar', ILockingProvider::LOCK_SHARED)); |
|
|
|
|
$this->assertFalse($view->lockFile($pathPrefix . '/foo/bar', ILockingProvider::LOCK_EXCLUSIVE)); |
|
|
|
|
@ -1516,7 +1519,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
|
|
|
|
|
public function testChangeLock() { |
|
|
|
|
$view = new View('/testuser/files/'); |
|
|
|
|
$storage = new Temporary(array()); |
|
|
|
|
$storage = new Temporary([]); |
|
|
|
|
Filesystem::mount($storage, [], '/'); |
|
|
|
|
|
|
|
|
|
$view->lockFile('/test/sub', ILockingProvider::LOCK_SHARED); |
|
|
|
|
@ -1544,7 +1547,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
['/foo', '/files/foo', true], |
|
|
|
|
['/foo', 'filesfoo', false], |
|
|
|
|
['', '/foo/files', true], |
|
|
|
|
['', '/foo/files/bar.txt', true] |
|
|
|
|
['', '/foo/files/bar.txt', true], |
|
|
|
|
]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1828,7 +1831,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
->setMethods([$operation]) |
|
|
|
|
->getMock(); |
|
|
|
|
|
|
|
|
|
Filesystem::mount($storage, array(), $this->user . '/'); |
|
|
|
|
Filesystem::mount($storage, [], $this->user . '/'); |
|
|
|
|
|
|
|
|
|
// work directly on disk because mkdir might be mocked |
|
|
|
|
$realPath = $storage->getSourcePath(''); |
|
|
|
|
@ -1852,7 +1855,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$this->connectMockHooks($hookType, $view, $lockedPath, $lockTypePre, $lockTypePost); |
|
|
|
|
|
|
|
|
|
// do operation |
|
|
|
|
call_user_func_array(array($view, $operation), $operationArgs); |
|
|
|
|
call_user_func_array([$view, $operation], $operationArgs); |
|
|
|
|
|
|
|
|
|
if ($hookType !== null) { |
|
|
|
|
$this->assertEquals($expectedLockBefore, $lockTypePre, 'File locked properly during pre-hook'); |
|
|
|
|
@ -1878,7 +1881,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
->setMethods(['fopen']) |
|
|
|
|
->getMock(); |
|
|
|
|
|
|
|
|
|
Filesystem::mount($storage, array(), $this->user . '/'); |
|
|
|
|
Filesystem::mount($storage, [], $this->user . '/'); |
|
|
|
|
$storage->mkdir('files'); |
|
|
|
|
|
|
|
|
|
$storage->expects($this->once()) |
|
|
|
|
@ -1917,7 +1920,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
->setMethods(['fopen']) |
|
|
|
|
->getMock(); |
|
|
|
|
|
|
|
|
|
Filesystem::mount($storage, array(), $this->user . '/'); |
|
|
|
|
Filesystem::mount($storage, [], $this->user . '/'); |
|
|
|
|
$storage->mkdir('files'); |
|
|
|
|
|
|
|
|
|
$storage->expects($this->once()) |
|
|
|
|
@ -1972,7 +1975,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
->setMethods([$operation]) |
|
|
|
|
->getMock(); |
|
|
|
|
|
|
|
|
|
Filesystem::mount($storage, array(), $this->user . '/'); |
|
|
|
|
Filesystem::mount($storage, [], $this->user . '/'); |
|
|
|
|
|
|
|
|
|
// work directly on disk because mkdir might be mocked |
|
|
|
|
$realPath = $storage->getSourcePath(''); |
|
|
|
|
@ -1991,7 +1994,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
|
|
|
|
|
$thrown = false; |
|
|
|
|
try { |
|
|
|
|
call_user_func_array(array($view, $operation), $operationArgs); |
|
|
|
|
call_user_func_array([$view, $operation], $operationArgs); |
|
|
|
|
} catch (\Exception $e) { |
|
|
|
|
$thrown = true; |
|
|
|
|
$this->assertEquals('Simulated exception', $e->getMessage()); |
|
|
|
|
@ -2005,7 +2008,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
|
|
|
|
|
$storage = new Temporary([]); |
|
|
|
|
|
|
|
|
|
Filesystem::mount($storage, array(), $this->user . '/'); |
|
|
|
|
Filesystem::mount($storage, [], $this->user . '/'); |
|
|
|
|
|
|
|
|
|
$storage->mkdir('files'); |
|
|
|
|
$storage->mkdir('files/dir'); |
|
|
|
|
@ -2054,7 +2057,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
->setMethods([$operation]) |
|
|
|
|
->getMock(); |
|
|
|
|
|
|
|
|
|
Filesystem::mount($storage, array(), $this->user . '/'); |
|
|
|
|
Filesystem::mount($storage, [], $this->user . '/'); |
|
|
|
|
$storage->mkdir('files'); |
|
|
|
|
|
|
|
|
|
Util::connectHook( |
|
|
|
|
@ -2064,7 +2067,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
'cancellingCallback' |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
call_user_func_array(array($view, $operation), $operationArgs); |
|
|
|
|
call_user_func_array([$view, $operation], $operationArgs); |
|
|
|
|
|
|
|
|
|
$this->assertNull($this->getFileLockType($view, $path), 'File got unlocked after exception'); |
|
|
|
|
} |
|
|
|
|
@ -2100,7 +2103,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$sourcePath = 'original.txt'; |
|
|
|
|
$targetPath = 'target.txt'; |
|
|
|
|
|
|
|
|
|
Filesystem::mount($storage, array(), $this->user . '/'); |
|
|
|
|
Filesystem::mount($storage, [], $this->user . '/'); |
|
|
|
|
$storage->mkdir('files'); |
|
|
|
|
$view->file_put_contents($sourcePath, 'meh'); |
|
|
|
|
|
|
|
|
|
@ -2152,7 +2155,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$sourcePath = 'original.txt'; |
|
|
|
|
$targetPath = 'target.txt'; |
|
|
|
|
|
|
|
|
|
Filesystem::mount($storage, array(), $this->user . '/'); |
|
|
|
|
Filesystem::mount($storage, [], $this->user . '/'); |
|
|
|
|
$storage->mkdir('files'); |
|
|
|
|
$view->file_put_contents($sourcePath, 'meh'); |
|
|
|
|
|
|
|
|
|
@ -2279,8 +2282,8 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
$sourcePath = 'original.txt'; |
|
|
|
|
$targetPath = 'substorage/target.txt'; |
|
|
|
|
|
|
|
|
|
Filesystem::mount($storage, array(), $this->user . '/'); |
|
|
|
|
Filesystem::mount($storage2, array(), $this->user . '/files/substorage'); |
|
|
|
|
Filesystem::mount($storage, [], $this->user . '/'); |
|
|
|
|
Filesystem::mount($storage2, [], $this->user . '/files/substorage'); |
|
|
|
|
$storage->mkdir('files'); |
|
|
|
|
$view->file_put_contents($sourcePath, 'meh'); |
|
|
|
|
|
|
|
|
|
@ -2513,7 +2516,7 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
public function testGetDirectoryContentMimeFilter($filter, $expected) { |
|
|
|
|
$storage1 = new Temporary(); |
|
|
|
|
$root = self::getUniqueID('/'); |
|
|
|
|
Filesystem::mount($storage1, array(), $root . '/'); |
|
|
|
|
Filesystem::mount($storage1, [], $root . '/'); |
|
|
|
|
$view = new View($root); |
|
|
|
|
|
|
|
|
|
$view->file_put_contents('test1.txt', 'asd'); |
|
|
|
|
@ -2532,10 +2535,10 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testFilePutContentsClearsChecksum() { |
|
|
|
|
$storage = new Temporary(array()); |
|
|
|
|
$storage = new Temporary([]); |
|
|
|
|
$scanner = $storage->getScanner(); |
|
|
|
|
$storage->file_put_contents('foo.txt', 'bar'); |
|
|
|
|
Filesystem::mount($storage, array(), '/test/'); |
|
|
|
|
Filesystem::mount($storage, [], '/test/'); |
|
|
|
|
$scanner->scan(''); |
|
|
|
|
|
|
|
|
|
$view = new View('/test/foo.txt'); |
|
|
|
|
@ -2552,11 +2555,11 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testDeleteGhostFile() { |
|
|
|
|
$storage = new Temporary(array()); |
|
|
|
|
$storage = new Temporary([]); |
|
|
|
|
$scanner = $storage->getScanner(); |
|
|
|
|
$cache = $storage->getCache(); |
|
|
|
|
$storage->file_put_contents('foo.txt', 'bar'); |
|
|
|
|
Filesystem::mount($storage, array(), '/test/'); |
|
|
|
|
Filesystem::mount($storage, [], '/test/'); |
|
|
|
|
$scanner->scan(''); |
|
|
|
|
|
|
|
|
|
$storage->unlink('foo.txt'); |
|
|
|
|
@ -2575,12 +2578,12 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testDeleteGhostFolder() { |
|
|
|
|
$storage = new Temporary(array()); |
|
|
|
|
$storage = new Temporary([]); |
|
|
|
|
$scanner = $storage->getScanner(); |
|
|
|
|
$cache = $storage->getCache(); |
|
|
|
|
$storage->mkdir('foo'); |
|
|
|
|
$storage->file_put_contents('foo/foo.txt', 'bar'); |
|
|
|
|
Filesystem::mount($storage, array(), '/test/'); |
|
|
|
|
Filesystem::mount($storage, [], '/test/'); |
|
|
|
|
$scanner->scan(''); |
|
|
|
|
|
|
|
|
|
$storage->rmdir('foo'); |
|
|
|
|
@ -2669,4 +2672,24 @@ class ViewTest extends \Test\TestCase { |
|
|
|
|
->willReturn(true); |
|
|
|
|
$this->assertFalse(self::invokePrivate($view, 'createParentDirectories', ['/file.txt/folder/structure'])); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testCacheExtension() { |
|
|
|
|
$storage = new Temporary([]); |
|
|
|
|
$scanner = $storage->getScanner(); |
|
|
|
|
$storage->file_put_contents('foo.txt', 'bar'); |
|
|
|
|
$scanner->scan(''); |
|
|
|
|
|
|
|
|
|
Filesystem::mount($storage, [], '/test/'); |
|
|
|
|
$view = new View('/test'); |
|
|
|
|
|
|
|
|
|
$info = $view->getFileInfo('/foo.txt'); |
|
|
|
|
$this->assertEquals(0, $info->getUploadTime()); |
|
|
|
|
$this->assertEquals(0, $info->getCreationTime()); |
|
|
|
|
|
|
|
|
|
$view->putFileInfo('/foo.txt', ['upload_time' => 25]); |
|
|
|
|
|
|
|
|
|
$info = $view->getFileInfo('/foo.txt'); |
|
|
|
|
$this->assertEquals(25, $info->getUploadTime()); |
|
|
|
|
$this->assertEquals(0, $info->getCreationTime()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|