Merge pull request #6605 from nupplaphil/config_mock

Refactor ConfigMockTrait to mocked ConfigCache
This commit is contained in:
Hypolite Petovan 2019-02-07 21:03:52 -05:00 committed by GitHub
commit b912823ea9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
27 changed files with 244 additions and 193 deletions

View File

@ -22,7 +22,7 @@ use Friendica\Core\Config\IConfigCache;
class Config class Config
{ {
/** /**
* @var Config\IConfigAdapter * @var Config\IConfigAdapter|null
*/ */
private static $adapter; private static $adapter;
@ -62,7 +62,7 @@ class Config
*/ */
public static function load($family = "config") public static function load($family = "config")
{ {
if (!isset(self::$adapter)) { if (!isset(self::$adapter) || !self::$adapter->isConnected()) {
return; return;
} }
@ -86,7 +86,7 @@ class Config
*/ */
public static function get($family, $key, $default_value = null, $refresh = false) public static function get($family, $key, $default_value = null, $refresh = false)
{ {
if (!isset(self::$adapter)) { if (!isset(self::$adapter) || !self::$adapter->isConnected()) {
return self::$cache->get($family, $key, $default_value); return self::$cache->get($family, $key, $default_value);
} }
@ -108,9 +108,8 @@ class Config
*/ */
public static function set($family, $key, $value) public static function set($family, $key, $value)
{ {
if (!isset(self::$adapter)) { if (!isset(self::$adapter) || !self::$adapter->isConnected()) {
self::$cache->set($family, $key, $value); return self::$cache->set($family, $key, $value);
return true;
} }
return self::$adapter->set($family, $key, $value); return self::$adapter->set($family, $key, $value);
@ -129,7 +128,7 @@ class Config
*/ */
public static function delete($family, $key) public static function delete($family, $key)
{ {
if (!isset(self::$adapter)) { if (!isset(self::$adapter) || !self::$adapter->isConnected()) {
self::$cache->delete($family, $key); self::$cache->delete($family, $key);
} }

View File

@ -0,0 +1,13 @@
<?php
namespace Friendica\Core\Config;
use Friendica\Database\DBA;
abstract class AbstractDbaConfigAdapter
{
public function isConnected()
{
return DBA::connected();
}
}

View File

@ -94,6 +94,8 @@ class ConfigCache implements IConfigCache, IPConfigCache
$this->config[$cat][$key] = $value; $this->config[$cat][$key] = $value;
} }
return true;
} }
/** /**

View File

@ -54,4 +54,11 @@ interface IConfigAdapter
* @return mixed * @return mixed
*/ */
public function delete($cat, $k); public function delete($cat, $k);
/**
* Checks, if the current adapter is connected to the backend
*
* @return bool
*/
public function isConnected();
} }

View File

@ -22,6 +22,8 @@ interface IConfigCache
* @param string $cat Config category * @param string $cat Config category
* @param string $key Config key * @param string $key Config key
* @param mixed $value Value to set * @param mixed $value Value to set
*
* @return bool True, if the value is set
*/ */
function set($cat, $key, $value); function set($cat, $key, $value);

View File

@ -10,7 +10,7 @@ use Friendica\Database\DBA;
* *
* @author Hypolite Petovan <hypolite@mrpetovan.com> * @author Hypolite Petovan <hypolite@mrpetovan.com>
*/ */
class JITConfigAdapter implements IConfigAdapter class JITConfigAdapter extends AbstractDbaConfigAdapter implements IConfigAdapter
{ {
private $cache; private $cache;
private $in_db; private $in_db;
@ -33,6 +33,10 @@ class JITConfigAdapter implements IConfigAdapter
*/ */
public function load($cat = "config") public function load($cat = "config")
{ {
if (!$this->isConnected()) {
return;
}
// We don't preload "system" anymore. // We don't preload "system" anymore.
// This reduces the number of database reads a lot. // This reduces the number of database reads a lot.
if ($cat === 'system') { if ($cat === 'system') {
@ -58,6 +62,10 @@ class JITConfigAdapter implements IConfigAdapter
*/ */
public function get($cat, $k, $default_value = null, $refresh = false) public function get($cat, $k, $default_value = null, $refresh = false)
{ {
if (!$this->isConnected()) {
return $default_value;
}
if (!$refresh) { if (!$refresh) {
// Do we have the cached value? Then return it // Do we have the cached value? Then return it
if (isset($this->cache[$cat][$k])) { if (isset($this->cache[$cat][$k])) {
@ -103,6 +111,10 @@ class JITConfigAdapter implements IConfigAdapter
*/ */
public function set($cat, $k, $value) public function set($cat, $k, $value)
{ {
if (!$this->isConnected()) {
return false;
}
// We store our setting values in a string variable. // We store our setting values in a string variable.
// So we have to do the conversion here so that the compare below works. // So we have to do the conversion here so that the compare below works.
// The exception are array values. // The exception are array values.
@ -143,6 +155,10 @@ class JITConfigAdapter implements IConfigAdapter
*/ */
public function delete($cat, $k) public function delete($cat, $k)
{ {
if (!$this->isConnected()) {
return false;
}
if (isset($this->cache[$cat][$k])) { if (isset($this->cache[$cat][$k])) {
unset($this->cache[$cat][$k]); unset($this->cache[$cat][$k]);
unset($this->in_db[$cat][$k]); unset($this->in_db[$cat][$k]);

View File

@ -12,7 +12,7 @@ use Friendica\Database\DBA;
* *
* @author Hypolite Petovan <hypolite@mrpetovan.com> * @author Hypolite Petovan <hypolite@mrpetovan.com>
*/ */
class PreloadConfigAdapter implements IConfigAdapter class PreloadConfigAdapter extends AbstractDbaConfigAdapter implements IConfigAdapter
{ {
private $config_loaded = false; private $config_loaded = false;
@ -35,6 +35,10 @@ class PreloadConfigAdapter implements IConfigAdapter
*/ */
public function load($family = 'config') public function load($family = 'config')
{ {
if (!$this->isConnected()) {
return;
}
if ($this->config_loaded) { if ($this->config_loaded) {
return; return;
} }
@ -53,6 +57,10 @@ class PreloadConfigAdapter implements IConfigAdapter
*/ */
public function get($cat, $k, $default_value = null, $refresh = false) public function get($cat, $k, $default_value = null, $refresh = false)
{ {
if (!$this->isConnected()) {
return $default_value;
}
if ($refresh) { if ($refresh) {
$config = DBA::selectFirst('config', ['v'], ['cat' => $cat, 'k' => $k]); $config = DBA::selectFirst('config', ['v'], ['cat' => $cat, 'k' => $k]);
if (DBA::isResult($config)) { if (DBA::isResult($config)) {
@ -70,6 +78,10 @@ class PreloadConfigAdapter implements IConfigAdapter
*/ */
public function set($cat, $k, $value) public function set($cat, $k, $value)
{ {
if (!$this->isConnected()) {
return false;
}
// We store our setting values as strings. // We store our setting values as strings.
// So we have to do the conversion here so that the compare below works. // So we have to do the conversion here so that the compare below works.
// The exception are array values. // The exception are array values.
@ -97,6 +109,10 @@ class PreloadConfigAdapter implements IConfigAdapter
*/ */
public function delete($cat, $k) public function delete($cat, $k)
{ {
if (!$this->isConnected()) {
return false;
}
$this->configCache->delete($cat, $k); $this->configCache->delete($cat, $k);
$result = DBA::delete('config', ['cat' => $cat, 'k' => $k]); $result = DBA::delete('config', ['cat' => $cat, 'k' => $k]);

View File

@ -4,6 +4,7 @@ namespace Friendica\Test\Util;
use Friendica\App; use Friendica\App;
use Friendica\BaseObject; use Friendica\BaseObject;
use Friendica\Core\Config;
use Friendica\Core\Config\ConfigCache; use Friendica\Core\Config\ConfigCache;
use Friendica\Render\FriendicaSmartyEngine; use Friendica\Render\FriendicaSmartyEngine;
use Mockery\MockInterface; use Mockery\MockInterface;
@ -14,13 +15,16 @@ use org\bovigo\vfs\vfsStreamDirectory;
*/ */
trait AppMockTrait trait AppMockTrait
{ {
use ConfigMockTrait;
/** /**
* @var MockInterface|App The mocked Friendica\App * @var MockInterface|App The mocked Friendica\App
*/ */
protected $app; protected $app;
/**
* @var MockInterface|ConfigCache The mocked Config Cache
*/
protected $configCache;
/** /**
* Mock the App * Mock the App
* *
@ -29,8 +33,7 @@ trait AppMockTrait
*/ */
public function mockApp($root, $config) public function mockApp($root, $config)
{ {
$this->mockConfigGet('system', 'theme', 'testtheme'); $this->configCache = $config;
// Mocking App and most used functions // Mocking App and most used functions
$this->app = \Mockery::mock(App::class); $this->app = \Mockery::mock(App::class);
$this->app $this->app
@ -53,6 +56,15 @@ trait AppMockTrait
->shouldReceive('get') ->shouldReceive('get')
->with('database', 'database') ->with('database', 'database')
->andReturn(getenv('MYSQL_DATABASE')); ->andReturn(getenv('MYSQL_DATABASE'));
$config
->shouldReceive('get')
->with('config', 'hostname')
->andReturn('localhost');
$config
->shouldReceive('get')
->with('system', 'theme', NULL)
->andReturn('system_theme');
$this->app $this->app
->shouldReceive('getConfig') ->shouldReceive('getConfig')
->andReturn($config); ->andReturn($config);
@ -70,6 +82,14 @@ trait AppMockTrait
->shouldReceive('getBaseUrl') ->shouldReceive('getBaseUrl')
->andReturn('http://friendica.local'); ->andReturn('http://friendica.local');
// Initialize empty Config
Config::init($config);
$configAdapter = \Mockery::mock('Friendica\Core\Config\IConfigAdapter');
$configAdapter
->shouldReceive('isConnected')
->andReturn(false);
Config::setAdapter($configAdapter);
BaseObject::setApp($this->app); BaseObject::setApp($this->app);
} }
} }

View File

@ -1,64 +0,0 @@
<?php
namespace Friendica\Test\Util;
use Mockery\MockInterface;
/**
* Trait to Mock Config settings
*/
trait ConfigMockTrait
{
/**
* @var MockInterface The mocking interface of Friendica\Core\Config
*/
private $configMock;
/**
* Mocking a config setting
*
* @param string $family The family of the config double
* @param string $key The key of the config double
* @param mixed $value The value of the config double
* @param null|int $times How often the Config will get used
*/
public function mockConfigGet($family, $key, $value, $times = null)
{
if (!isset($this->configMock)) {
$this->configMock = \Mockery::mock('alias:Friendica\Core\Config');
}
$this->configMock
->shouldReceive('get')
->times($times)
->with($family, $key)
->andReturn($value);
}
/**
* Mocking setting a new config entry
*
* @param string $family The family of the config double
* @param string $key The key of the config double
* @param mixed $value The value of the config double
* @param null|int $times How often the Config will get used
* @param bool $return Return value of the set (default is true)
*/
public function mockConfigSet($family, $key, $value, $times = null, $return = true)
{
if (!isset($this->configMock)) {
$this->configMock = \Mockery::mock('alias:Friendica\Core\Config');
}
$this->mockConfigGet($family, $key, false, 1);
if ($return) {
$this->mockConfigGet($family, $key, $value, 1);
}
$this->configMock
->shouldReceive('set')
->times($times)
->with($family, $key, $value)
->andReturn($return);
}
}

View File

@ -1,14 +1,7 @@
<?php <?php
/**
* Created by PhpStorm.
* User: philipp
* Date: 01.11.18
* Time: 10:08
*/
namespace Friendica\Test\Util; namespace Friendica\Test\Util;
use Mockery\MockInterface; use Mockery\MockInterface;
trait RendererMockTrait trait RendererMockTrait

View File

@ -3,24 +3,19 @@
namespace Friendica\Test\src\App; namespace Friendica\Test\src\App;
use Friendica\App\Mode; use Friendica\App\Mode;
use Friendica\Core\Config;
use Friendica\Test\MockedTest; use Friendica\Test\MockedTest;
use Friendica\Test\Util\ConfigMockTrait;
use Friendica\Test\Util\DBAMockTrait; use Friendica\Test\Util\DBAMockTrait;
use Friendica\Test\Util\VFSTrait; use Friendica\Test\Util\VFSTrait;
/**
* @runTestsInSeparateProcesses
* @preserveGlobalState disabled
*/
class ModeTest extends MockedTest class ModeTest extends MockedTest
{ {
use VFSTrait; use VFSTrait;
use DBAMockTrait; use DBAMockTrait;
use ConfigMockTrait;
public function setUp() public function setUp()
{ {
parent::setUp(); // TODO: Change the autogenerated stub parent::setUp();
$this->setUpVfsDir(); $this->setUpVfsDir();
} }
@ -50,6 +45,10 @@ class ModeTest extends MockedTest
$this->assertFalse($mode->has(Mode::LOCALCONFIGPRESENT)); $this->assertFalse($mode->has(Mode::LOCALCONFIGPRESENT));
} }
/**
* @runInSeparateProcess
* @preserveGlobalState disabled
*/
public function testWithoutDatabase() public function testWithoutDatabase()
{ {
$this->mockConnected(false, 1); $this->mockConnected(false, 1);
@ -64,6 +63,10 @@ class ModeTest extends MockedTest
$this->assertFalse($mode->has(Mode::DBAVAILABLE)); $this->assertFalse($mode->has(Mode::DBAVAILABLE));
} }
/**
* @runInSeparateProcess
* @preserveGlobalState disabled
*/
public function testWithoutDatabaseSetup() public function testWithoutDatabaseSetup()
{ {
$this->mockConnected(true, 1); $this->mockConnected(true, 1);
@ -78,11 +81,28 @@ class ModeTest extends MockedTest
$this->assertTrue($mode->has(Mode::LOCALCONFIGPRESENT)); $this->assertTrue($mode->has(Mode::LOCALCONFIGPRESENT));
} }
/**
* @runInSeparateProcess
* @preserveGlobalState disabled
*/
public function testWithMaintenanceMode() public function testWithMaintenanceMode()
{ {
$this->mockConnected(true, 1); $this->mockConnected(true, 1);
$this->mockFetchFirst('SHOW TABLES LIKE \'config\'', true, 1); $this->mockFetchFirst('SHOW TABLES LIKE \'config\'', true, 1);
$this->mockConfigGet('system', 'maintenance', true, 1);
$config = \Mockery::mock('Friendica\Core\Config\ConfigCache');
$config
->shouldReceive('get')
->with('system', 'maintenance', null)
->andReturn(true)
->once();
// Initialize empty Config
Config::init($config);
$configAdapter = \Mockery::mock('Friendica\Core\Config\IConfigAdapter');
$configAdapter
->shouldReceive('isConnected')
->andReturn(false);
Config::setAdapter($configAdapter);
$mode = new Mode($this->root->url()); $mode = new Mode($this->root->url());
$mode->determine(); $mode->determine();
@ -94,11 +114,28 @@ class ModeTest extends MockedTest
$this->assertFalse($mode->has(Mode::MAINTENANCEDISABLED)); $this->assertFalse($mode->has(Mode::MAINTENANCEDISABLED));
} }
/**
* @runInSeparateProcess
* @preserveGlobalState disabled
*/
public function testNormalMode() public function testNormalMode()
{ {
$this->mockConnected(true, 1); $this->mockConnected(true, 1);
$this->mockFetchFirst('SHOW TABLES LIKE \'config\'', true, 1); $this->mockFetchFirst('SHOW TABLES LIKE \'config\'', true, 1);
$this->mockConfigGet('system', 'maintenance', false, 1);
$config = \Mockery::mock('Friendica\Core\Config\ConfigCache');
$config
->shouldReceive('get')
->with('system', 'maintenance', null)
->andReturn(false)
->once();
// Initialize empty Config
Config::init($config);
$configAdapter = \Mockery::mock('Friendica\Core\Config\IConfigAdapter');
$configAdapter
->shouldReceive('isConnected')
->andReturn(false);
Config::setAdapter($configAdapter);
$mode = new Mode($this->root->url()); $mode = new Mode($this->root->url());
$mode->determine(); $mode->determine();

View File

@ -5,7 +5,6 @@
namespace Friendica\Test; namespace Friendica\Test;
use Friendica\App;
use Friendica\BaseObject; use Friendica\BaseObject;
use Friendica\Test\Util\AppMockTrait; use Friendica\Test\Util\AppMockTrait;
use Friendica\Test\Util\VFSTrait; use Friendica\Test\Util\VFSTrait;
@ -13,8 +12,6 @@ use PHPUnit\Framework\TestCase;
/** /**
* Tests for the BaseObject class. * Tests for the BaseObject class.
* @runTestsInSeparateProcesses
* @preserveGlobalState disabled
*/ */
class BaseObjectTest extends TestCase class BaseObjectTest extends TestCase
{ {
@ -27,46 +24,29 @@ class BaseObjectTest extends TestCase
private $baseObject; private $baseObject;
/** /**
* Create variables used in tests. * Test the setApp() and getApp() function.
*/
protected function setUp()
{
$this->baseObject = new BaseObject();
}
/**
* Test the getApp() function.
* @return void * @return void
*/ */
public function testGetApp() public function testGetSetApp()
{ {
$baseObject = new BaseObject();
$this->setUpVfsDir(); $this->setUpVfsDir();
$configMock = \Mockery::mock('Friendica\Core\Config\ConfigCache'); $configMock = \Mockery::mock('Friendica\Core\Config\ConfigCache');
$this->mockApp($this->root, $configMock); $this->mockApp($this->root, $configMock);
$this->assertInstanceOf(App::class, $this->baseObject->getApp()); $this->assertNull($baseObject->setApp($this->app));
} $this->assertEquals($this->app, $baseObject->getApp());
/**
* Test the setApp() function.
* @return void
*/
public function testSetApp()
{
$this->setUpVfsDir();
$configMock = \Mockery::mock('Friendica\Core\Config\ConfigCache');
$this->mockApp($this->root, $configMock);
$this->assertNull($this->baseObject->setApp($this->app));
$this->assertEquals($this->app, $this->baseObject->getApp());
} }
/** /**
* Test the getApp() function without App * Test the getApp() function without App
* @expectedException Friendica\Network\HTTPException\InternalServerErrorException * @expectedException Friendica\Network\HTTPException\InternalServerErrorException
* @runInSeparateProcess
* @preserveGlobalState disabled
*/ */
public function testGetAppFailed() public function testGetAppFailed()
{ {
BaseObject::getApp(); $baseObject = new BaseObject();
$baseObject->getApp();
} }
} }

View File

@ -2,13 +2,8 @@
namespace Friendica\Test\src\Core\Cache; namespace Friendica\Test\src\Core\Cache;
use Friendica\Core\Cache\ArrayCache; use Friendica\Core\Cache\ArrayCache;
/**
* @runTestsInSeparateProcesses
* @preserveGlobalState disabled
*/
class ArrayCacheDriverTest extends MemoryCacheTest class ArrayCacheDriverTest extends MemoryCacheTest
{ {
protected function getInstance() protected function getInstance()

View File

@ -5,7 +5,6 @@ namespace Friendica\Test\src\Core\Cache;
use Friendica\Core\Cache\MemcachedCacheDriver; use Friendica\Core\Cache\MemcachedCacheDriver;
use Friendica\Test\MockedTest; use Friendica\Test\MockedTest;
use Friendica\Test\Util\AppMockTrait; use Friendica\Test\Util\AppMockTrait;
use Friendica\Test\Util\DateTimeFormatMockTrait;
use Friendica\Test\Util\VFSTrait; use Friendica\Test\Util\VFSTrait;
use Friendica\Util\PidFile; use Friendica\Util\PidFile;
@ -13,7 +12,6 @@ abstract class CacheTest extends MockedTest
{ {
use VFSTrait; use VFSTrait;
use AppMockTrait; use AppMockTrait;
use DateTimeFormatMockTrait;
/** /**
* @var int Start time of the mock (used for time operations) * @var int Start time of the mock (used for time operations)
@ -75,19 +73,10 @@ abstract class CacheTest extends MockedTest
->shouldReceive('getHostname') ->shouldReceive('getHostname')
->andReturn('friendica.local'); ->andReturn('friendica.local');
$this->mockUtcNow($this->startTime);
parent::setUp(); parent::setUp();
$this->instance = $this->getInstance(); $this->instance = $this->getInstance();
// Default config
$this->mockConfigGet('config', 'hostname', 'localhost');
$this->mockConfigGet('system', 'throttle_limit_day', 100);
$this->mockConfigGet('system', 'throttle_limit_week', 100);
$this->mockConfigGet('system', 'throttle_limit_month', 100);
$this->mockConfigGet('system', 'theme', 'system_theme');
$this->instance->clear(false); $this->instance->clear(false);
} }

View File

@ -16,6 +16,8 @@ class DatabaseCacheDriverTest extends CacheTest
public function setUp() public function setUp()
{ {
$this->mockUtcNow($this->startTime);
$this->mockConnected(); $this->mockConnected();
$this->mockConnect(); $this->mockConnect();

View File

@ -6,16 +6,21 @@ namespace Friendica\Test\src\Core\Cache;
use Friendica\Core\Cache\CacheDriverFactory; use Friendica\Core\Cache\CacheDriverFactory;
/** /**
* @runTestsInSeparateProcesses
* @preserveGlobalState disabled
* @requires extension memcache * @requires extension memcache
*/ */
class MemcacheCacheDriverTest extends MemoryCacheTest class MemcacheCacheDriverTest extends MemoryCacheTest
{ {
protected function getInstance() protected function getInstance()
{ {
$this->mockConfigGet('system', 'memcache_host', 'localhost', 1); $this->configCache
$this->mockConfigGet('system', 'memcache_port', 11211, 1); ->shouldReceive('get')
->with('system', 'memcache_host', NULL)
->andReturn('localhost');
$this->configCache
->shouldReceive('get')
->with('system', 'memcache_port', NULL)
->andReturn(11211);
$this->cache = CacheDriverFactory::create('memcache'); $this->cache = CacheDriverFactory::create('memcache');
return $this->cache; return $this->cache;

View File

@ -6,15 +6,16 @@ namespace Friendica\Test\src\Core\Cache;
use Friendica\Core\Cache\CacheDriverFactory; use Friendica\Core\Cache\CacheDriverFactory;
/** /**
* @runTestsInSeparateProcesses
* @preserveGlobalState disabled
* @requires extension memcached * @requires extension memcached
*/ */
class MemcachedCacheDriverTest extends MemoryCacheTest class MemcachedCacheDriverTest extends MemoryCacheTest
{ {
protected function getInstance() protected function getInstance()
{ {
$this->mockConfigGet('system', 'memcached_hosts', [0 => 'localhost, 11211']); $this->configCache
->shouldReceive('get')
->with('system', 'memcached_hosts', NULL)
->andReturn([0 => 'localhost, 11211']);
$this->cache = CacheDriverFactory::create('memcached'); $this->cache = CacheDriverFactory::create('memcached');
return $this->cache; return $this->cache;

View File

@ -6,16 +6,21 @@ namespace Friendica\Test\src\Core\Cache;
use Friendica\Core\Cache\CacheDriverFactory; use Friendica\Core\Cache\CacheDriverFactory;
/** /**
* @runTestsInSeparateProcesses
* @preserveGlobalState disabled
* @requires extension redis * @requires extension redis
*/ */
class RedisCacheDriverTest extends MemoryCacheTest class RedisCacheDriverTest extends MemoryCacheTest
{ {
protected function getInstance() protected function getInstance()
{ {
$this->mockConfigGet('system', 'redis_host', 'localhost', 1); $this->configCache
$this->mockConfigGet('system', 'redis_port', null, 1); ->shouldReceive('get')
->with('system', 'redis_host', NULL)
->andReturn('localhost');
$this->configCache
->shouldReceive('get')
->with('system', 'redis_port', NULL)
->andReturn(null);
$this->cache = CacheDriverFactory::create('redis'); $this->cache = CacheDriverFactory::create('redis');
return $this->cache; return $this->cache;

View File

@ -52,7 +52,10 @@ class AutomaticInstallationConsoleTest extends ConsoleTest
$this->db_user = getenv('MYSQL_USERNAME') . getenv('MYSQL_USER'); $this->db_user = getenv('MYSQL_USERNAME') . getenv('MYSQL_USER');
$this->db_pass = getenv('MYSQL_PASSWORD'); $this->db_pass = getenv('MYSQL_PASSWORD');
$this->mockConfigGet('config', 'php_path', false); $this->configCache
->shouldReceive('get')
->with('config', 'php_path', NULL)
->andReturn(false);
$this->mockL10nT(); $this->mockL10nT();
} }

View File

@ -32,7 +32,17 @@ class ConfigConsoleTest extends ConsoleTest
} }
function testSetGetKeyValue() { function testSetGetKeyValue() {
$this->mockConfigSet('config', 'test', 'now', 1); $this->configCache
->shouldReceive('set')
->with('config', 'test', 'now')
->andReturn(true)
->once();
$this->configCache
->shouldReceive('get')
->with('config', 'test', NULL)
->andReturn('now')
->twice();
$console = new Config($this->consoleArgv); $console = new Config($this->consoleArgv);
$console->setArgument(0, 'config'); $console->setArgument(0, 'config');
$console->setArgument(1, 'test'); $console->setArgument(1, 'test');
@ -40,14 +50,24 @@ class ConfigConsoleTest extends ConsoleTest
$txt = $this->dumpExecute($console); $txt = $this->dumpExecute($console);
$this->assertEquals("config.test <= now\n", $txt); $this->assertEquals("config.test <= now\n", $txt);
$this->mockConfigGet('config', 'test', 'now', 1); $this->configCache
->shouldReceive('get')
->with('config', 'test', null)
->andReturn('now')
->once();
$console = new Config($this->consoleArgv); $console = new Config($this->consoleArgv);
$console->setArgument(0, 'config'); $console->setArgument(0, 'config');
$console->setArgument(1, 'test'); $console->setArgument(1, 'test');
$txt = $this->dumpExecute($console); $txt = $this->dumpExecute($console);
$this->assertEquals("config.test => now\n", $txt); $this->assertEquals("config.test => now\n", $txt);
$this->mockConfigGet('config', 'test', null, 1); $this->configCache
->shouldReceive('get')
->with('config', 'test', null)
->andReturn(null)
->once();
$console = new Config($this->consoleArgv); $console = new Config($this->consoleArgv);
$console->setArgument(0, 'config'); $console->setArgument(0, 'config');
$console->setArgument(1, 'test'); $console->setArgument(1, 'test');
@ -57,7 +77,11 @@ class ConfigConsoleTest extends ConsoleTest
function testSetArrayValue() { function testSetArrayValue() {
$testArray = [1, 2, 3]; $testArray = [1, 2, 3];
$this->mockConfigGet('config', 'test', $testArray, 1); $this->configCache
->shouldReceive('get')
->with('config', 'test', null)
->andReturn($testArray)
->once();
$console = new Config($this->consoleArgv); $console = new Config($this->consoleArgv);
$console->setArgument(0, 'config'); $console->setArgument(0, 'config');
@ -81,7 +105,11 @@ class ConfigConsoleTest extends ConsoleTest
} }
function testVerbose() { function testVerbose() {
$this->mockConfigGet('test', 'it', 'now', 1); $this->configCache
->shouldReceive('get')
->with('test', 'it', null)
->andReturn('now')
->once();
$console = new Config($this->consoleArgv); $console = new Config($this->consoleArgv);
$console->setArgument(0, 'test'); $console->setArgument(0, 'test');
$console->setArgument(1, 'it'); $console->setArgument(1, 'it');
@ -105,7 +133,16 @@ CONF;
} }
function testUnableToSet() { function testUnableToSet() {
$this->mockConfigSet('test', 'it', 'now', 1, false); $this->configCache
->shouldReceive('set')
->with('test', 'it', 'now')
->andReturn(false)
->once();
$this->configCache
->shouldReceive('get')
->with('test', 'it', NULL)
->andReturn(NULL)
->once();
$console = new Config(); $console = new Config();
$console->setArgument(0, 'test'); $console->setArgument(0, 'test');
$console->setArgument(1, 'it'); $console->setArgument(1, 'it');

View File

@ -6,10 +6,6 @@ namespace Friendica\Test\src\Core\Lock;
use Friendica\Core\Cache\ArrayCache; use Friendica\Core\Cache\ArrayCache;
use Friendica\Core\Lock\CacheLockDriver; use Friendica\Core\Lock\CacheLockDriver;
/**
* @runTestsInSeparateProcesses
* @preserveGlobalState disabled
*/
class ArrayCacheLockDriverTest extends LockTest class ArrayCacheLockDriverTest extends LockTest
{ {
protected function getInstance() protected function getInstance()

View File

@ -25,10 +25,6 @@ abstract class LockTest extends MockedTest
protected function setUp() protected function setUp()
{ {
parent::setUp();
$this->instance = $this->getInstance();
$this->instance->releaseAll();
// Reusable App object // Reusable App object
$this->setUpVfsDir(); $this->setUpVfsDir();
$configMock = \Mockery::mock('Friendica\Core\Config\ConfigCache'); $configMock = \Mockery::mock('Friendica\Core\Config\ConfigCache');
@ -37,12 +33,9 @@ abstract class LockTest extends MockedTest
->shouldReceive('getHostname') ->shouldReceive('getHostname')
->andReturn('friendica.local'); ->andReturn('friendica.local');
// Default config parent::setUp();
$this->mockConfigGet('config', 'hostname', 'localhost'); $this->instance = $this->getInstance();
$this->mockConfigGet('system', 'throttle_limit_day', 100); $this->instance->releaseAll();
$this->mockConfigGet('system', 'throttle_limit_week', 100);
$this->mockConfigGet('system', 'throttle_limit_month', 100);
$this->mockConfigGet('system', 'theme', 'system_theme');
} }
protected function tearDown() protected function tearDown()

View File

@ -8,15 +8,20 @@ use Friendica\Core\Lock\CacheLockDriver;
/** /**
* @requires extension Memcache * @requires extension Memcache
* @runTestsInSeparateProcesses
* @preserveGlobalState disabled
*/ */
class MemcacheCacheLockDriverTest extends LockTest class MemcacheCacheLockDriverTest extends LockTest
{ {
protected function getInstance() protected function getInstance()
{ {
$this->mockConfigGet('system', 'memcache_host', 'localhost', 1); $this->configCache
$this->mockConfigGet('system', 'memcache_port', 11211, 1); ->shouldReceive('get')
->with('system', 'memcache_host', NULL)
->andReturn('localhost');
$this->configCache
->shouldReceive('get')
->with('system', 'memcache_port', NULL)
->andReturn(11211);
return new CacheLockDriver(CacheDriverFactory::create('memcache')); return new CacheLockDriver(CacheDriverFactory::create('memcache'));
} }

View File

@ -8,14 +8,15 @@ use Friendica\Core\Lock\CacheLockDriver;
/** /**
* @requires extension memcached * @requires extension memcached
* @runTestsInSeparateProcesses
* @preserveGlobalState disabled
*/ */
class MemcachedCacheLockDriverTest extends LockTest class MemcachedCacheLockDriverTest extends LockTest
{ {
protected function getInstance() protected function getInstance()
{ {
$this->mockConfigGet('system', 'memcached_hosts', [0 => 'localhost, 11211']); $this->configCache
->shouldReceive('get')
->with('system', 'memcached_hosts', NULL)
->andReturn([0 => 'localhost, 11211']);
return new CacheLockDriver(CacheDriverFactory::create('memcached')); return new CacheLockDriver(CacheDriverFactory::create('memcached'));
} }

View File

@ -8,15 +8,20 @@ use Friendica\Core\Lock\CacheLockDriver;
/** /**
* @requires extension redis * @requires extension redis
* @runTestsInSeparateProcesses
* @preserveGlobalState disabled
*/ */
class RedisCacheLockDriverTest extends LockTest class RedisCacheLockDriverTest extends LockTest
{ {
protected function getInstance() protected function getInstance()
{ {
$this->mockConfigGet('system', 'redis_host', 'localhost', 1); $this->configCache
$this->mockConfigGet('system', 'redis_port', null, 1); ->shouldReceive('get')
->with('system', 'redis_host', NULL)
->andReturn('localhost');
$this->configCache
->shouldReceive('get')
->with('system', 'redis_port', NULL)
->andReturn(null);
return new CacheLockDriver(CacheDriverFactory::create('redis')); return new CacheLockDriver(CacheDriverFactory::create('redis'));
} }

View File

@ -4,10 +4,6 @@ namespace Friendica\Test\src\Core\Lock;
use Friendica\Core\Lock\SemaphoreLockDriver; use Friendica\Core\Lock\SemaphoreLockDriver;
/**
* @runTestsInSeparateProcesses
* @preserveGlobalState disabled
*/
class SemaphoreLockDriverTest extends LockTest class SemaphoreLockDriverTest extends LockTest
{ {
public function setUp() public function setUp()
@ -15,7 +11,11 @@ class SemaphoreLockDriverTest extends LockTest
parent::setUp(); parent::setUp();
$this->app->shouldReceive('getHostname')->andReturn('friendica.local'); $this->app->shouldReceive('getHostname')->andReturn('friendica.local');
$this->mockConfigGet('system', 'temppath', '/tmp/');
$this->configCache
->shouldReceive('get')
->with('system', 'temppath', NULL)
->andReturn('/tmp/');
} }
protected function getInstance() protected function getInstance()

View File

@ -21,13 +21,6 @@ class DBStructureTest extends DatabaseTest
$this->logOutput = FActory\LoggerFactory::enableTest($this->app->getLogger()); $this->logOutput = FActory\LoggerFactory::enableTest($this->app->getLogger());
parent::setUp(); parent::setUp();
// Default config
Config::set('config', 'hostname', 'localhost');
Config::set('system', 'throttle_limit_day', 100);
Config::set('system', 'throttle_limit_week', 100);
Config::set('system', 'throttle_limit_month', 100);
Config::set('system', 'theme', 'system_theme');
} }
/** /**