Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>pull/5084/head
parent
4be17dff0f
commit
7c2d473d76
@ -0,0 +1,71 @@ |
||||
<?php |
||||
/** |
||||
* @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program 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 program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
|
||||
namespace OC\GlobalScale; |
||||
|
||||
|
||||
use OCP\IConfig; |
||||
|
||||
class Config implements \OCP\GlobalScale\IConfig { |
||||
|
||||
/** @var IConfig */ |
||||
private $config; |
||||
|
||||
/** |
||||
* Config constructor. |
||||
* |
||||
* @param IConfig $config |
||||
*/ |
||||
public function __construct(IConfig $config) { |
||||
$this->config = $config; |
||||
} |
||||
|
||||
/** |
||||
* check if global scale is enabled |
||||
* |
||||
* @since 12.0.1 |
||||
* @return bool |
||||
*/ |
||||
public function isGlobalScaleEnabled() { |
||||
$enabled = $this->config->getSystemValue('gs.enabled', false); |
||||
return $enabled !== false; |
||||
} |
||||
|
||||
/** |
||||
* check if federation should only be used internally in a global scale setup |
||||
* |
||||
* @since 12.0.1 |
||||
* @return bool |
||||
*/ |
||||
public function onlyInternalFederation() { |
||||
// if global scale is disabled federation works always globally |
||||
$gsEnabled = $this->isGlobalScaleEnabled(); |
||||
if ($gsEnabled === false) { |
||||
return false; |
||||
} |
||||
|
||||
$enabled = $this->config->getSystemValue('gs.federation', 'internal'); |
||||
|
||||
return $enabled === 'internal'; |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,51 @@ |
||||
<?php |
||||
/** |
||||
* @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program 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 program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
|
||||
namespace OCP\GlobalScale; |
||||
|
||||
/** |
||||
* Interface IConfig |
||||
* |
||||
* Configuration of the global scale architecture |
||||
* |
||||
* @package OCP\GlobalScale |
||||
* @since 12.0.1 |
||||
*/ |
||||
interface IConfig { |
||||
|
||||
/** |
||||
* check if global scale is enabled |
||||
* |
||||
* @since 12.0.1 |
||||
* @return bool |
||||
*/ |
||||
public function isGlobalScaleEnabled(); |
||||
|
||||
/** |
||||
* check if federation should only be used internally in a global scale setup |
||||
* |
||||
* @since 12.0.1 |
||||
* @return bool |
||||
*/ |
||||
public function onlyInternalFederation(); |
||||
|
||||
} |
||||
@ -0,0 +1,95 @@ |
||||
<?php |
||||
/** |
||||
* @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program 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 program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
|
||||
namespace Test\GlobalScale; |
||||
|
||||
|
||||
use OC\GlobalScale\Config; |
||||
use OCP\IConfig; |
||||
use Test\TestCase; |
||||
|
||||
class ConfigTest extends TestCase { |
||||
|
||||
/** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */ |
||||
private $config; |
||||
|
||||
public function setUp() { |
||||
parent::setUp(); |
||||
|
||||
$this->config = $this->createMock(IConfig::class); |
||||
} |
||||
|
||||
/** |
||||
* @param array $mockMethods |
||||
* @return Config|\PHPUnit_Framework_MockObject_MockObject |
||||
*/ |
||||
public function getInstance($mockMethods = []) { |
||||
|
||||
if (!empty($mockMethods)) { |
||||
return $this->getMockBuilder(Config::class) |
||||
->setConstructorArgs([$this->config]) |
||||
->setMethods($mockMethods) |
||||
->getMock(); |
||||
} |
||||
|
||||
return new Config($this->config); |
||||
} |
||||
|
||||
public function testIsGlobalScaleEnabled() { |
||||
$gsConfig = $this->getInstance(); |
||||
$this->config->expects($this->once())->method('getSystemValue') |
||||
->with('gs.enabled', false)->willReturn(true); |
||||
|
||||
$result = $gsConfig->isGlobalScaleEnabled(); |
||||
|
||||
$this->assertTrue($result); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* @dataProvider dataTestOnlyInternalFederation |
||||
* |
||||
* @param bool $gsEnabled |
||||
* @param string $gsFederation |
||||
* @param bool $expected |
||||
*/ |
||||
public function testOnlyInternalFederation($gsEnabled, $gsFederation, $expected) { |
||||
$gsConfig = $this->getInstance(['isGlobalScaleEnabled']); |
||||
|
||||
$gsConfig->expects($this->any())->method('isGlobalScaleEnabled')->willReturn($gsEnabled); |
||||
|
||||
$this->config->expects($this->any())->method('getSystemValue') |
||||
->with('gs.federation', 'internal')->willReturn($gsFederation); |
||||
|
||||
$this->assertSame($expected, $gsConfig->onlyInternalFederation()); |
||||
} |
||||
|
||||
public function dataTestOnlyInternalFederation() { |
||||
return [ |
||||
[true, 'global', false], |
||||
[true, 'internal', true], |
||||
[false, 'global', false], |
||||
[false, 'internal', false] |
||||
]; |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue