mirror of
https://github.com/nextcloud/server.git
synced 2025-10-26 19:21:34 +00:00
Merge pull request #5715 from owncloud/quota-sharing-wrapotherusershome
Quota storage wrapper is now used for all users in sharing mode
This commit is contained in:
commit
d0265f3388
@ -22,9 +22,18 @@
|
||||
*/
|
||||
|
||||
class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase {
|
||||
private static $user;
|
||||
|
||||
function setUp() {
|
||||
// mock OC_L10n
|
||||
if (!self::$user) {
|
||||
self::$user = uniqid();
|
||||
}
|
||||
\OC_User::createUser(self::$user, 'password');
|
||||
\OC_User::setUserId(self::$user);
|
||||
|
||||
\OC\Files\Filesystem::init(self::$user, '/' . self::$user . '/files');
|
||||
|
||||
$l10nMock = $this->getMock('\OC_L10N', array('t'), array(), '', false);
|
||||
$l10nMock->expects($this->any())
|
||||
->method('t')
|
||||
@ -39,6 +48,12 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase {
|
||||
$this->files = new \OCA\Files\App($viewMock, $l10nMock);
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
$result = \OC_User::deleteUser(self::$user);
|
||||
$this->assertTrue($result);
|
||||
\OC\Files\Filesystem::tearDown();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief test rename of file/folder named "Shared"
|
||||
*/
|
||||
|
||||
@ -22,6 +22,12 @@ class Home extends Local {
|
||||
*/
|
||||
protected $user;
|
||||
|
||||
/**
|
||||
* @brief Construct a Home storage instance
|
||||
* @param array $arguments array with "user" containing the
|
||||
* storage owner and "legacy" containing "true" if the storage is
|
||||
* a legacy storage with "local::" URL instead of the new "home::" one.
|
||||
*/
|
||||
public function __construct($arguments) {
|
||||
$this->user = $arguments['user'];
|
||||
$datadir = $this->user->getHome();
|
||||
@ -40,10 +46,21 @@ class Home extends Local {
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \OC\Files\Cache\HomeCache
|
||||
*/
|
||||
public function getCache($path = '') {
|
||||
if (!isset($this->cache)) {
|
||||
$this->cache = new \OC\Files\Cache\HomeCache($this);
|
||||
}
|
||||
return $this->cache;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns the owner of this home storage
|
||||
* @return \OC\User\User owner of this home storage
|
||||
*/
|
||||
public function getUser() {
|
||||
return $this->user;
|
||||
}
|
||||
}
|
||||
|
||||
@ -53,16 +53,21 @@ class OC_Util {
|
||||
|
||||
//if we aren't logged in, there is no use to set up the filesystem
|
||||
if( $user != "" ) {
|
||||
$quota = self::getUserQuota($user);
|
||||
if ($quota !== \OC\Files\SPACE_UNLIMITED) {
|
||||
\OC\Files\Filesystem::addStorageWrapper(function($mountPoint, $storage) use ($quota, $user) {
|
||||
if ($mountPoint === '/' . $user . '/'){
|
||||
\OC\Files\Filesystem::addStorageWrapper(function($mountPoint, $storage){
|
||||
// set up quota for home storages, even for other users
|
||||
// which can happen when using sharing
|
||||
|
||||
if ($storage instanceof \OC\Files\Storage\Home) {
|
||||
$user = $storage->getUser()->getUID();
|
||||
$quota = OC_Util::getUserQuota($user);
|
||||
if ($quota !== \OC\Files\SPACE_UNLIMITED) {
|
||||
return new \OC\Files\Storage\Wrapper\Quota(array('storage' => $storage, 'quota' => $quota));
|
||||
} else {
|
||||
return $storage;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return $storage;
|
||||
});
|
||||
|
||||
$userDir = '/'.$user.'/files';
|
||||
$userRoot = OC_User::getHome($user);
|
||||
$userDirectory = $userRoot . '/files';
|
||||
|
||||
@ -93,6 +93,55 @@ class Test_Util extends PHPUnit_Framework_TestCase {
|
||||
$this->assertStringStartsWith('oc', OC_Util::getInstanceId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that the home storage is not wrapped when no quota exists.
|
||||
*/
|
||||
function testHomeStorageWrapperWithoutQuota() {
|
||||
$user1 = uniqid();
|
||||
\OC_User::createUser($user1, 'test');
|
||||
OC_Preferences::setValue($user1, 'files', 'quota', 'none');
|
||||
\OC_User::setUserId($user1);
|
||||
|
||||
\OC_Util::setupFS($user1);
|
||||
|
||||
$userMount = \OC\Files\Filesystem::getMountManager()->find('/' . $user1 . '/');
|
||||
$this->assertNotNull($userMount);
|
||||
$this->assertNotInstanceOf('\OC\Files\Storage\Wrapper\Quota', $userMount->getStorage());
|
||||
|
||||
// clean up
|
||||
\OC_User::setUserId('');
|
||||
\OC_User::deleteUser($user1);
|
||||
OC_Preferences::deleteUser($user1);
|
||||
\OC_Util::tearDownFS();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that the home storage is not wrapped when no quota exists.
|
||||
*/
|
||||
function testHomeStorageWrapperWithQuota() {
|
||||
$user1 = uniqid();
|
||||
\OC_User::createUser($user1, 'test');
|
||||
OC_Preferences::setValue($user1, 'files', 'quota', '1024');
|
||||
\OC_User::setUserId($user1);
|
||||
|
||||
\OC_Util::setupFS($user1);
|
||||
|
||||
$userMount = \OC\Files\Filesystem::getMountManager()->find('/' . $user1 . '/');
|
||||
$this->assertNotNull($userMount);
|
||||
$this->assertInstanceOf('\OC\Files\Storage\Wrapper\Quota', $userMount->getStorage());
|
||||
|
||||
// ensure that root wasn't wrapped
|
||||
$rootMount = \OC\Files\Filesystem::getMountManager()->find('/');
|
||||
$this->assertNotNull($rootMount);
|
||||
$this->assertNotInstanceOf('\OC\Files\Storage\Wrapper\Quota', $rootMount->getStorage());
|
||||
|
||||
// clean up
|
||||
\OC_User::setUserId('');
|
||||
\OC_User::deleteUser($user1);
|
||||
OC_Preferences::deleteUser($user1);
|
||||
\OC_Util::tearDownFS();
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider baseNameProvider
|
||||
*/
|
||||
|
||||
Loading…
Reference in New Issue
Block a user