From 20cad09f7fa7f81862fbfb538bed7ddd8c0923b3 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Tue, 10 Nov 2015 11:06:48 +0100 Subject: [PATCH] Add tests for FileInfo owner --- apps/files_sharing/tests/share.php | 16 +++++++++ tests/lib/files/view.php | 54 ++++++++++++++++++++++++------ 2 files changed, 60 insertions(+), 10 deletions(-) diff --git a/apps/files_sharing/tests/share.php b/apps/files_sharing/tests/share.php index abff820c16..896191dfe5 100644 --- a/apps/files_sharing/tests/share.php +++ b/apps/files_sharing/tests/share.php @@ -322,6 +322,22 @@ class Test_Files_Sharing extends OCA\Files_sharing\Tests\TestCase { ); } + public function testFileOwner() { + + $fileinfo = $this->view->getFileInfo($this->filename); + + $result = \OCP\Share::shareItem('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER, + \Test_Files_Sharing::TEST_FILES_SHARING_API_USER2, \OCP\Constants::PERMISSION_ALL); + + $this->assertTrue($result); + + $this->loginHelper(\Test_Files_Sharing::TEST_FILES_SHARING_API_USER2); + + $info = \OC\Files\Filesystem::getFileInfo($this->filename); + + $this->assertSame(\Test_Files_Sharing::TEST_FILES_SHARING_API_USER1, $info->getOwner()->getUID()); + } + /** * @dataProvider dataProviderGetUsersSharingFile * diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php index a7979146b8..f0bad5abd1 100644 --- a/tests/lib/files/view.php +++ b/tests/lib/files/view.php @@ -11,6 +11,7 @@ use OC\Files\Cache\Watcher; use OC\Files\Storage\Common; use OC\Files\Mount\MountPoint; use OC\Files\Storage\Temporary; +use OCP\Files\FileInfo; use OCP\Lock\ILockingProvider; class TemporaryNoTouch extends \OC\Files\Storage\Temporary { @@ -1560,6 +1561,7 @@ class View extends \Test\TestCase { $this->assertTrue($view->rename('mount1', 'renamed_mount'), 'Can rename mount point'); $this->assertTrue($view->rename('mount2', 'sub/moved_mount'), 'Can move a mount point into a subdirectory'); } + /** * Test that moving a mount point into another is forbidden */ @@ -1582,6 +1584,7 @@ class View extends \Test\TestCase { $this->assertFalse($view->rename('mount1', 'mount2'), 'Cannot overwrite another mount point'); $this->assertFalse($view->rename('mount1', 'mount2/sub'), 'Cannot move a mount point into another'); } + /** * Test that moving a mount point into a shared folder is forbidden */ @@ -1765,7 +1768,7 @@ class View extends \Test\TestCase { $storage->expects($this->once()) ->method($operation) ->will($this->returnCallback( - function() use ($view, $lockedPath, &$lockTypeDuring){ + function () use ($view, $lockedPath, &$lockTypeDuring) { $lockTypeDuring = $this->getFileLockType($view, $lockedPath); return true; @@ -1808,7 +1811,7 @@ class View extends \Test\TestCase { $storage->expects($this->once()) ->method('fopen') ->will($this->returnCallback( - function() use ($view, $path, &$lockTypeDuring){ + function () use ($view, $path, &$lockTypeDuring) { $lockTypeDuring = $this->getFileLockType($view, $path); return fopen('php://temp', 'r+'); @@ -1846,7 +1849,7 @@ class View extends \Test\TestCase { $storage->expects($this->once()) ->method('fopen') ->will($this->returnCallback( - function() use ($view, $path, &$lockTypeDuring){ + function () use ($view, $path, &$lockTypeDuring) { $lockTypeDuring = $this->getFileLockType($view, $path); return fopen('php://temp', 'r+'); @@ -1903,7 +1906,7 @@ class View extends \Test\TestCase { $storage->expects($this->once()) ->method($operation) ->will($this->returnCallback( - function() { + function () { throw new \Exception('Simulated exception'); } )); @@ -1993,7 +1996,7 @@ class View extends \Test\TestCase { $storage->expects($this->once()) ->method($operation) ->will($this->returnCallback( - function() use ($view, $sourcePath, $targetPath, &$lockTypeSourceDuring, &$lockTypeTargetDuring){ + function () use ($view, $sourcePath, $targetPath, &$lockTypeSourceDuring, &$lockTypeTargetDuring) { $lockTypeSourceDuring = $this->getFileLockType($view, $sourcePath); $lockTypeTargetDuring = $this->getFileLockType($view, $targetPath); @@ -2044,7 +2047,7 @@ class View extends \Test\TestCase { $storage->expects($this->once()) ->method('copy') ->will($this->returnCallback( - function() { + function () { throw new \Exception(); } )); @@ -2097,6 +2100,37 @@ class View extends \Test\TestCase { $view->unlockFile($targetPath, ILockingProvider::LOCK_EXCLUSIVE); } + /** + * Test rename operation: unlock first path when second path was locked + */ + public function testGetOwner() { + $this->loginAsUser('test'); + + $view = new \OC\Files\View('/test/files/'); + + $path = 'foo.txt'; + $view->file_put_contents($path, 'meh'); + + $this->assertEquals('test', $view->getFileInfo($path)->getOwner()->getUID()); + + $folderInfo = $view->getDirectoryContent(''); + $folderInfo = array_values(array_filter($folderInfo, function (FileInfo $info) { + return $info->getName() === 'foo.txt'; + })); + + $this->assertEquals('test', $folderInfo[0]->getOwner()->getUID()); + + $subStorage = new Temporary(); + \OC\Files\Filesystem::mount($subStorage, [], '/test/files/asd'); + + $folderInfo = $view->getDirectoryContent(''); + $folderInfo = array_values(array_filter($folderInfo, function (FileInfo $info) { + return $info->getName() === 'asd'; + })); + + $this->assertEquals('test', $folderInfo[0]->getOwner()->getUID()); + } + public function lockFileRenameOrCopyCrossStorageDataProvider() { return [ ['rename', 'moveFromStorage', ILockingProvider::LOCK_EXCLUSIVE], @@ -2141,7 +2175,7 @@ class View extends \Test\TestCase { $storage2->expects($this->once()) ->method($storageOperation) ->will($this->returnCallback( - function() use ($view, $sourcePath, $targetPath, &$lockTypeSourceDuring, &$lockTypeTargetDuring){ + function () use ($view, $sourcePath, $targetPath, &$lockTypeSourceDuring, &$lockTypeTargetDuring) { $lockTypeSourceDuring = $this->getFileLockType($view, $sourcePath); $lockTypeTargetDuring = $this->getFileLockType($view, $targetPath); @@ -2188,7 +2222,7 @@ class View extends \Test\TestCase { $mount->expects($this->once()) ->method('moveMount') ->will($this->returnCallback( - function($target) use ($mount, $view, $sourcePath, $targetPath, &$lockTypeSourceDuring, &$lockTypeTargetDuring, &$lockTypeSharedRootDuring){ + function ($target) use ($mount, $view, $sourcePath, $targetPath, &$lockTypeSourceDuring, &$lockTypeTargetDuring, &$lockTypeSharedRootDuring) { $lockTypeSourceDuring = $this->getFileLockType($view, $sourcePath, true); $lockTypeTargetDuring = $this->getFileLockType($view, $targetPath, true); @@ -2253,14 +2287,14 @@ class View extends \Test\TestCase { $eventHandler->expects($this->any()) ->method('preCallback') ->will($this->returnCallback( - function() use ($view, $path, $onMountPoint, &$lockTypePre){ + function () use ($view, $path, $onMountPoint, &$lockTypePre) { $lockTypePre = $this->getFileLockType($view, $path, $onMountPoint); } )); $eventHandler->expects($this->any()) ->method('postCallback') ->will($this->returnCallback( - function() use ($view, $path, $onMountPoint, &$lockTypePost){ + function () use ($view, $path, $onMountPoint, &$lockTypePost) { $lockTypePost = $this->getFileLockType($view, $path, $onMountPoint); } ));