Ignore NoUserException for shares from ghosts

Add unit tests for FailedStorage init from SharedStorage

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
This commit is contained in:
Vincent Petry 2017-01-25 12:22:09 +01:00 committed by Lukas Reschke
parent caa48bc984
commit cbeedbfb83
No known key found for this signature in database
GPG Key ID: B9F6980CF6E759B1
2 changed files with 44 additions and 2 deletions

View File

@ -32,15 +32,14 @@
namespace OCA\Files_Sharing; namespace OCA\Files_Sharing;
use OC\Files\Filesystem; use OC\Files\Filesystem;
use OC\Files\Cache\FailedCache;
use OC\Files\Storage\Wrapper\PermissionsMask; use OC\Files\Storage\Wrapper\PermissionsMask;
use OCA\Files_Sharing\ISharedStorage;
use OC\Files\Storage\FailedStorage; use OC\Files\Storage\FailedStorage;
use OCP\Constants; use OCP\Constants;
use OCP\Files\Cache\ICacheEntry; use OCP\Files\Cache\ICacheEntry;
use OCP\Files\NotFoundException; use OCP\Files\NotFoundException;
use OCP\Files\Storage\IStorage; use OCP\Files\Storage\IStorage;
use OCP\Lock\ILockingProvider; use OCP\Lock\ILockingProvider;
use OC\User\NoUserException;
/** /**
* Convert target path to source path and pass the function call to the correct storage provider * Convert target path to source path and pass the function call to the correct storage provider
@ -121,6 +120,11 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
'mask' => $this->superShare->getPermissions() 'mask' => $this->superShare->getPermissions()
]); ]);
} catch (NotFoundException $e) { } catch (NotFoundException $e) {
// original file not accessible or deleted, set FailedStorage
$this->storage = new FailedStorage(['exception' => $e]);
$this->rootPath = '';
} catch (NoUserException $e) {
// sharer user deleted, set FailedStorage
$this->storage = new FailedStorage(['exception' => $e]); $this->storage = new FailedStorage(['exception' => $e]);
$this->rootPath = ''; $this->rootPath = '';
} catch (\Exception $e) { } catch (\Exception $e) {

View File

@ -28,6 +28,11 @@
namespace OCA\Files_Sharing\Tests; namespace OCA\Files_Sharing\Tests;
use OCA\Files_Sharing\SharedStorage;
use OCP\Share\IShare;
use OC\Files\View;
use OCP\Files\NotFoundException;
/** /**
* Class SharedStorageTest * Class SharedStorageTest
* *
@ -559,4 +564,37 @@ class SharedStorageTest extends TestCase {
$this->shareManager->deleteShare($share); $this->shareManager->deleteShare($share);
} }
public function testInitWithNonExistingUser() {
$share = $this->createMock(IShare::class);
$share->method('getShareOwner')->willReturn('unexist');
$ownerView = $this->createMock(View::class);
$storage = new SharedStorage([
'ownerView' => $ownerView,
'superShare' => $share,
'groupedShares' => [$share],
'user' => 'user1',
]);
// trigger init
$this->assertInstanceOf(\OC\Files\Cache\FailedCache::class, $storage->getCache());
$this->assertInstanceOf(\OC\Files\Storage\FailedStorage::class, $storage->getSourceStorage());
}
public function testInitWithNotFoundSource() {
$share = $this->createMock(IShare::class);
$share->method('getShareOwner')->willReturn(self::TEST_FILES_SHARING_API_USER1);
$ownerView = $this->createMock(View::class);
$ownerView->method('getPath')->will($this->throwException(new NotFoundException()));
$storage = new SharedStorage([
'ownerView' => $ownerView,
'superShare' => $share,
'groupedShares' => [$share],
'user' => 'user1',
]);
// trigger init
$this->assertInstanceOf(\OC\Files\Cache\FailedCache::class, $storage->getCache());
$this->assertInstanceOf(\OC\Files\Storage\FailedStorage::class, $storage->getSourceStorage());
}
} }