Now using HomeStorage for legacy home storage ids
Legacy home storage ids with the format "local://path/to/datadir/user1" are now also wrapped by the HomeStorage.
This commit is contained in:
parent
1a65e3a725
commit
34c92f6656
|
@ -307,11 +307,19 @@ class Filesystem {
|
|||
$root = \OC_User::getHome($user);
|
||||
|
||||
$userObject = \OC_User::getManager()->get($user);
|
||||
if (\OC\Files\Cache\Storage::exists('local::' . $root . '/') or is_null($userObject)) {
|
||||
self::mount('\OC\Files\Storage\Local', array('datadir' => $root), $user);
|
||||
} else {
|
||||
|
||||
if (!is_null($userObject)) {
|
||||
// check for legacy home id (<= 5.0.12)
|
||||
if (\OC\Files\Cache\Storage::exists('local::' . $root . '/')) {
|
||||
self::mount('\OC\Files\Storage\Home', array('user' => $userObject, 'legacy' => true), $user);
|
||||
}
|
||||
else {
|
||||
self::mount('\OC\Files\Storage\Home', array('user' => $userObject), $user);
|
||||
}
|
||||
}
|
||||
else {
|
||||
self::mount('\OC\Files\Storage\Local', array('datadir' => $root), $user);
|
||||
}
|
||||
$datadir = \OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data");
|
||||
|
||||
//move config file to it's new position
|
||||
|
|
|
@ -12,6 +12,11 @@ namespace OC\Files\Storage;
|
|||
* Specialized version of Local storage for home directory usage
|
||||
*/
|
||||
class Home extends Local {
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $id;
|
||||
|
||||
/**
|
||||
* @var \OC\User\User $user
|
||||
*/
|
||||
|
@ -20,12 +25,19 @@ class Home extends Local {
|
|||
public function __construct($arguments) {
|
||||
$this->user = $arguments['user'];
|
||||
$datadir = $this->user->getHome();
|
||||
if (isset($arguments['legacy']) && $arguments['legacy']) {
|
||||
// legacy home id (<= 5.0.12)
|
||||
$this->id = 'local::' . $datadir . '/';
|
||||
}
|
||||
else {
|
||||
$this->id = 'home::' . $this->user->getUID();
|
||||
}
|
||||
|
||||
parent::__construct(array('datadir' => $datadir));
|
||||
}
|
||||
|
||||
public function getId() {
|
||||
return 'home::' . $this->user->getUID();
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function getCache($path = '') {
|
||||
|
|
|
@ -41,9 +41,12 @@ class Filesystem extends \PHPUnit_Framework_TestCase {
|
|||
foreach ($this->tmpDirs as $dir) {
|
||||
\OC_Helper::rmdirr($dir);
|
||||
}
|
||||
\OC\Files\Filesystem::clearMounts();
|
||||
\OC_User::setUserId('');
|
||||
}
|
||||
|
||||
public function setUp() {
|
||||
\OC_User::setUserId('');
|
||||
\OC\Files\Filesystem::clearMounts();
|
||||
}
|
||||
|
||||
|
@ -103,6 +106,67 @@ class Filesystem extends \PHPUnit_Framework_TestCase {
|
|||
// \OC\Files\Filesystem::file_put_contents('/bar//foo', $fh);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that a local storage mount is used when passed user
|
||||
* does not exist.
|
||||
*/
|
||||
public function testLocalMountWhenUserDoesNotExist() {
|
||||
$datadir = \OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data");
|
||||
$userId = uniqid('user_');
|
||||
|
||||
\OC\Files\Filesystem::initMountPoints($userId);
|
||||
|
||||
$homeMount = \OC\Files\Filesystem::getStorage('/' . $userId . '/');
|
||||
|
||||
$this->assertInstanceOf('\OC\Files\Storage\Local', $homeMount);
|
||||
$this->assertEquals('local::' . $datadir . '/' . $userId . '/', $homeMount->getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that the home storage is used for the user's mount point
|
||||
*/
|
||||
public function testHomeMount() {
|
||||
$userId = uniqid('user_');
|
||||
|
||||
\OC_User::createUser($userId, $userId);
|
||||
|
||||
\OC\Files\Filesystem::initMountPoints($userId);
|
||||
|
||||
$homeMount = \OC\Files\Filesystem::getStorage('/' . $userId . '/');
|
||||
|
||||
$this->assertInstanceOf('\OC\Files\Storage\Home', $homeMount);
|
||||
$this->assertEquals('home::' . $userId, $homeMount->getId());
|
||||
|
||||
\OC_User::deleteUser($userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that the home storage is used in legacy mode
|
||||
* for the user's mount point
|
||||
*/
|
||||
public function testLegacyHomeMount() {
|
||||
$datadir = \OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data");
|
||||
$userId = uniqid('user_');
|
||||
|
||||
// insert storage into DB by constructing it
|
||||
// to make initMountsPoint find its existence
|
||||
$localStorage = new \OC\Files\Storage\Local(array('datadir' => $datadir . '/' . $userId . '/'));
|
||||
// this will trigger the insert
|
||||
$cache = $localStorage->getCache();
|
||||
|
||||
\OC_User::createUser($userId, $userId);
|
||||
\OC\Files\Filesystem::initMountPoints($userId);
|
||||
|
||||
$homeMount = \OC\Files\Filesystem::getStorage('/' . $userId . '/');
|
||||
|
||||
$this->assertInstanceOf('\OC\Files\Storage\Home', $homeMount);
|
||||
$this->assertEquals('local::' . $datadir. '/' . $userId . '/', $homeMount->getId());
|
||||
|
||||
\OC_User::deleteUser($userId);
|
||||
// delete storage entry
|
||||
$cache->clear();
|
||||
}
|
||||
|
||||
public function dummyHook($arguments) {
|
||||
$path = $arguments['path'];
|
||||
$this->assertEquals($path, \OC\Files\Filesystem::normalizePath($path)); //the path passed to the hook should already be normalized
|
||||
|
|
|
@ -56,8 +56,8 @@ class Home extends Storage {
|
|||
|
||||
public function setUp() {
|
||||
$this->tmpDir = \OC_Helper::tmpFolder();
|
||||
$userId = uniqid('user_');
|
||||
$this->user = new DummyUser($userId, $this->tmpDir);
|
||||
$this->userId = uniqid('user_');
|
||||
$this->user = new DummyUser($this->userId, $this->tmpDir);
|
||||
$this->instance = new \OC\Files\Storage\Home(array('user' => $this->user));
|
||||
}
|
||||
|
||||
|
@ -65,7 +65,32 @@ class Home extends Storage {
|
|||
\OC_Helper::rmdirr($this->tmpDir);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that the root path matches the data dir
|
||||
*/
|
||||
public function testRoot() {
|
||||
$this->assertEquals($this->tmpDir, $this->instance->getLocalFolder(''));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that the home id is in the format home::user1
|
||||
*/
|
||||
public function testId() {
|
||||
$this->assertEquals('home::' . $this->userId, $this->instance->getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that the legacy home id is in the format local::/path/to/datadir/user1/
|
||||
*/
|
||||
public function testLegacyId() {
|
||||
$this->instance = new \OC\Files\Storage\Home(array('user' => $this->user, 'legacy' => true));
|
||||
$this->assertEquals('local::' . $this->tmpDir . '/', $this->instance->getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that getCache() returns an instance of HomeCache
|
||||
*/
|
||||
public function testGetCacheReturnsHomeCache() {
|
||||
$this->assertInstanceOf('\OC\Files\Cache\HomeCache', $this->instance->getCache());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue