mirror of https://github.com/nextcloud/server.git
add new config switched for the global scale architecture
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