|
|
@@ -20,6 +20,7 @@ class View extends \PHPUnit_Framework_TestCase { |
|
|
|
* @var \OC\Files\Storage\Storage[] $storages |
|
|
|
*/ |
|
|
|
private $storages = array(); |
|
|
|
private $user; |
|
|
|
|
|
|
|
public function setUp() { |
|
|
|
\OC_User::clearBackends(); |
|
|
@@ -569,6 +570,47 @@ class View extends \PHPUnit_Framework_TestCase { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function testLongPath() { |
|
|
|
|
|
|
|
$storage = new \OC\Files\Storage\Temporary(array()); |
|
|
|
\OC\Files\Filesystem::mount($storage, array(), '/'); |
|
|
|
|
|
|
|
$rootView = new \OC\Files\View(''); |
|
|
|
|
|
|
|
$longPath = ''; |
|
|
|
// 4000 is the maximum path length in file_cache.path |
|
|
|
$folderName = 'abcdefghijklmnopqrstuvwxyz012345678901234567890123456789'; |
|
|
|
$depth = (4000/57); |
|
|
|
foreach (range(0, $depth-1) as $i) { |
|
|
|
$longPath .= '/'.$folderName; |
|
|
|
$result = $rootView->mkdir($longPath); |
|
|
|
$this->assertTrue($result, "mkdir failed on $i - path length: " . strlen($longPath)); |
|
|
|
|
|
|
|
$result = $rootView->file_put_contents($longPath . '/test.txt', 'lorem'); |
|
|
|
$this->assertEquals(5, $result, "file_put_contents failed on $i"); |
|
|
|
|
|
|
|
$this->assertTrue($rootView->file_exists($longPath)); |
|
|
|
$this->assertTrue($rootView->file_exists($longPath . '/test.txt')); |
|
|
|
} |
|
|
|
|
|
|
|
$cache = $storage->getCache(); |
|
|
|
$scanner = $storage->getScanner(); |
|
|
|
$scanner->scan(''); |
|
|
|
|
|
|
|
$longPath = $folderName; |
|
|
|
foreach (range(0, $depth-1) as $i) { |
|
|
|
$cachedFolder = $cache->get($longPath); |
|
|
|
$this->assertTrue(is_array($cachedFolder), "No cache entry for folder at $i"); |
|
|
|
$this->assertEquals($folderName, $cachedFolder['name'], "Wrong cache entry for folder at $i"); |
|
|
|
|
|
|
|
$cachedFile = $cache->get($longPath . '/test.txt'); |
|
|
|
$this->assertTrue(is_array($cachedFile), "No cache entry for file at $i"); |
|
|
|
$this->assertEquals('test.txt', $cachedFile['name'], "Wrong cache entry for file at $i"); |
|
|
|
|
|
|
|
$longPath .= '/' . $folderName; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function testTouchNotSupported() { |
|
|
|
$storage = new TemporaryNoTouch(array()); |
|
|
|
$scanner = $storage->getScanner(); |
|
|
@@ -605,4 +647,83 @@ class View extends \PHPUnit_Framework_TestCase { |
|
|
|
array('/files/test', '/test'), |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @dataProvider tooLongPathDataProvider |
|
|
|
* @expectedException \OCP\Files\InvalidPathException |
|
|
|
*/ |
|
|
|
public function testTooLongPath($operation, $param0 = NULL) { |
|
|
|
|
|
|
|
$longPath = ''; |
|
|
|
// 4000 is the maximum path length in file_cache.path |
|
|
|
$folderName = 'abcdefghijklmnopqrstuvwxyz012345678901234567890123456789'; |
|
|
|
$depth = (4000/57); |
|
|
|
foreach (range(0, $depth+1) as $i) { |
|
|
|
$longPath .= '/'.$folderName; |
|
|
|
} |
|
|
|
|
|
|
|
$storage = new \OC\Files\Storage\Temporary(array()); |
|
|
|
\OC\Files\Filesystem::mount($storage, array(), '/'); |
|
|
|
|
|
|
|
$rootView = new \OC\Files\View(''); |
|
|
|
|
|
|
|
|
|
|
|
if ($param0 === '@0') { |
|
|
|
$param0 = $longPath; |
|
|
|
} |
|
|
|
|
|
|
|
if ($operation === 'hash') { |
|
|
|
$param0 = $longPath; |
|
|
|
$longPath = 'md5'; |
|
|
|
} |
|
|
|
|
|
|
|
call_user_func(array($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()), |
|
|
|
); |
|
|
|
} |
|
|
|
} |