unit tests for dynamic backend registration
This commit is contained in:
parent
e3b9a86184
commit
3ac009c2b4
|
@ -41,6 +41,11 @@ class OC_Mount_Config {
|
|||
|
||||
private static $backends = array();
|
||||
|
||||
/**
|
||||
* @param string $class
|
||||
* @param array $definition
|
||||
* @return bool
|
||||
*/
|
||||
public static function registerBackend($class, $definition) {
|
||||
if (!isset($definition['backend'])) {
|
||||
return false;
|
||||
|
@ -50,6 +55,18 @@ class OC_Mount_Config {
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup backends
|
||||
*
|
||||
* @return array of previously registered backends
|
||||
*/
|
||||
public static function setUp($backends = array()) {
|
||||
$backup = self::$backends;
|
||||
self::$backends = $backends;
|
||||
|
||||
return $backup;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get details on each of the external storage backends, used for the mount config UI
|
||||
* If a custom UI is needed, add the key 'custom' and a javascript file with that name will be loaded
|
||||
|
@ -57,28 +74,32 @@ class OC_Mount_Config {
|
|||
* If the configuration parameter is a boolean, add a '!' to the beginning of the value
|
||||
* If the configuration parameter is optional, add a '&' to the beginning of the value
|
||||
* If the configuration parameter is hidden, add a '#' to the beginning of the value
|
||||
* @return string
|
||||
* @return array
|
||||
*/
|
||||
public static function getBackends() {
|
||||
$sortFunc = function($a, $b) {
|
||||
return strcasecmp($a['backend'], $b['backend']);
|
||||
};
|
||||
|
||||
$backEnds = array();
|
||||
|
||||
foreach (OC_Mount_Config::$backends as $class => $backend) {
|
||||
if (isset($backend['has_dependencies']) and $backend['has_dependencies'] === true) {
|
||||
if (!method_exists($class, 'checkDependencies')) {
|
||||
\OCP\Util::writeLog('files_external', "Backend class $class has dependencies but doesn't provide method checkDependencies()", \OCP\Util::DEBUG);
|
||||
\OCP\Util::writeLog('files_external',
|
||||
"Backend class $class has dependencies but doesn't provide method checkDependencies()",
|
||||
\OCP\Util::DEBUG);
|
||||
continue;
|
||||
} elseif ($class::checkDependencies() !== true) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
$backends[$class] = $backend;
|
||||
$backEnds[$class] = $backend;
|
||||
}
|
||||
|
||||
uasort($backends, $sortFunc);
|
||||
uasort($backEnds, $sortFunc);
|
||||
|
||||
return $backends;
|
||||
return $backEnds;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -185,19 +206,19 @@ class OC_Mount_Config {
|
|||
*/
|
||||
public static function getPersonalBackends() {
|
||||
|
||||
$backends = self::getBackends();
|
||||
$backEnds = self::getBackends();
|
||||
|
||||
// Remove local storage and other disabled storages
|
||||
unset($backends['\OC\Files\Storage\Local']);
|
||||
unset($backEnds['\OC\Files\Storage\Local']);
|
||||
|
||||
$allowed_backends = explode(',', OCP\Config::getAppValue('files_external', 'user_mounting_backends', ''));
|
||||
foreach ($backends as $backend => $null) {
|
||||
if (!in_array($backend, $allowed_backends)) {
|
||||
unset($backends[$backend]);
|
||||
$allowedBackEnds = explode(',', OCP\Config::getAppValue('files_external', 'user_mounting_backends', ''));
|
||||
foreach ($backEnds as $backend => $null) {
|
||||
if (!in_array($backend, $allowedBackEnds)) {
|
||||
unset($backEnds[$backend]);
|
||||
}
|
||||
}
|
||||
|
||||
return $backends;
|
||||
return $backEnds;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -280,7 +301,7 @@ class OC_Mount_Config {
|
|||
*/
|
||||
public static function getPersonalMountPoints() {
|
||||
$mountPoints = self::readData(true);
|
||||
$backends = self::getBackends();
|
||||
$backEnds = self::getBackends();
|
||||
$uid = OCP\User::getUser();
|
||||
$personal = array();
|
||||
if (isset($mountPoints[self::MOUNT_TYPE_USER][$uid])) {
|
||||
|
@ -294,7 +315,7 @@ class OC_Mount_Config {
|
|||
'class' => $mount['class'],
|
||||
// Remove '/uid/files/' from mount point
|
||||
'mountpoint' => substr($mountPoint, strlen($uid) + 8),
|
||||
'backend' => $backends[$mount['class']]['backend'],
|
||||
'backend' => $backEnds[$mount['class']]['backend'],
|
||||
'options' => $mount['options'],
|
||||
'status' => self::getBackendStatus($mount['class'], $mount['options'], true)
|
||||
);
|
||||
|
@ -529,6 +550,9 @@ class OC_Mount_Config {
|
|||
if (isset($backend['has_dependencies']) and $backend['has_dependencies'] === true) {
|
||||
$result = $class::checkDependencies();
|
||||
if ($result !== true) {
|
||||
if (!is_array($result)) {
|
||||
$result = array($result);
|
||||
}
|
||||
foreach ($result as $key => $value) {
|
||||
if (is_numeric($key)) {
|
||||
OC_Mount_Config::addDependency($dependencies, $value, $backend['backend']);
|
||||
|
|
|
@ -0,0 +1,103 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud
|
||||
*
|
||||
* @author Thomas Müller
|
||||
* Copyright (c) 2014 Thomas Müller <deepdiver@owncloud.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
require_once __DIR__ . '/../../../lib/base.php';
|
||||
|
||||
require __DIR__ . '/../lib/config.php';
|
||||
|
||||
/**
|
||||
* Class Test_Mount_Config_Dummy_Backend
|
||||
*/
|
||||
class Test_Mount_Config_Dummy_Backend {
|
||||
public static $checkDependencies = true;
|
||||
|
||||
public static function checkDependencies() {
|
||||
return self::$checkDependencies;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Class Test_Dynamic_Mount_Config
|
||||
*/
|
||||
class Test_Dynamic_Mount_Config extends \PHPUnit_Framework_TestCase {
|
||||
|
||||
private $backup;
|
||||
|
||||
public function testRegistration() {
|
||||
|
||||
// second registration shall return false
|
||||
$result = OC_Mount_Config::registerBackend('Test_Mount_Config_Dummy_Backend', array(
|
||||
'backend' => 'Test Dummy',
|
||||
'configuration' => array(),
|
||||
'has_dependencies' => true));
|
||||
|
||||
$this->assertTrue($result);
|
||||
}
|
||||
|
||||
public function testDependencyGetBackend() {
|
||||
|
||||
// is the backend listed?
|
||||
Test_Mount_Config_Dummy_Backend::$checkDependencies = true;
|
||||
$backEnds = OC_Mount_Config::getBackends();
|
||||
$this->assertArrayHasKey('Test_Mount_Config_Dummy_Backend', $backEnds);
|
||||
|
||||
// backend shall not be listed
|
||||
Test_Mount_Config_Dummy_Backend::$checkDependencies = false;
|
||||
|
||||
$backEnds = OC_Mount_Config::getBackends();
|
||||
$this->assertArrayNotHasKey('Test_Mount_Config_Dummy_Backend', $backEnds);
|
||||
|
||||
}
|
||||
|
||||
public function testCheckDependencies() {
|
||||
|
||||
Test_Mount_Config_Dummy_Backend::$checkDependencies = true;
|
||||
$message = OC_Mount_Config::checkDependencies();
|
||||
$this->assertEmpty($message);
|
||||
|
||||
// backend shall not be listed
|
||||
Test_Mount_Config_Dummy_Backend::$checkDependencies = array('dummy');
|
||||
|
||||
$message = OC_Mount_Config::checkDependencies();
|
||||
$this->assertEquals('<br /><b>Note:</b> "dummy" is not installed. Mounting of <i>Test Dummy</i> is not possible. Please ask your system administrator to install it.',
|
||||
$message);
|
||||
|
||||
}
|
||||
|
||||
protected function setUp() {
|
||||
|
||||
$this->backup = OC_Mount_Config::setUp();
|
||||
|
||||
// register dummy backend
|
||||
$result = OC_Mount_Config::registerBackend('Test_Mount_Config_Dummy_Backend', array(
|
||||
'backend' => 'Test Dummy',
|
||||
'configuration' => array(),
|
||||
'has_dependencies' => true));
|
||||
|
||||
$this->assertTrue($result);
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
OC_Mount_Config::setUp($this->backup);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue