From 9bcd0ffac8349189a349dc4b1d7adffe88de0990 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sun, 23 Jan 2022 20:23:44 +0100 Subject: [PATCH 1/2] Fix Addons-Load for StorageManager --- src/Core/Storage/Repository/StorageManager.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Core/Storage/Repository/StorageManager.php b/src/Core/Storage/Repository/StorageManager.php index 3dcbef6511..b05e054d07 100644 --- a/src/Core/Storage/Repository/StorageManager.php +++ b/src/Core/Storage/Repository/StorageManager.php @@ -22,6 +22,7 @@ namespace Friendica\Core\Storage\Repository; use Exception; +use Friendica\Core\Addon; use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\Hook; use Friendica\Core\L10n; @@ -93,6 +94,11 @@ class StorageManager $currentName = $this->config->get('storage', 'name'); + /// @fixme Loading the addons & hooks here is really bad practice, but solves https://github.com/friendica/friendica/issues/11178 + /// clean solution = Making Addon & Hook dynamic and load them inside the constructor, so there's no custom load logic necessary anymore + Addon::loadAddons(); + Hook::loadHooks(); + // you can only use user backends as a "default" backend, so the second parameter is true $this->currentBackend = $this->getWritableStorageByName($currentName); } From 150e3a6f42243e05025f82c95cf992009a39c1ab Mon Sep 17 00:00:00 2001 From: Philipp Date: Sun, 23 Jan 2022 20:36:35 +0100 Subject: [PATCH 2/2] Add DEVELOP flag for StorageManager for testing purpose only --- .../Storage/Repository/StorageManager.php | 9 ++++--- .../Storage/Repository/StorageManagerTest.php | 25 ++++++++----------- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/Core/Storage/Repository/StorageManager.php b/src/Core/Storage/Repository/StorageManager.php index b05e054d07..89a7a913ab 100644 --- a/src/Core/Storage/Repository/StorageManager.php +++ b/src/Core/Storage/Repository/StorageManager.php @@ -80,11 +80,12 @@ class StorageManager * @param IManageConfigValues $config * @param LoggerInterface $logger * @param L10n $l10n + * @param bool $includeAddon (DEVELOP ONLY) Used for testing only - avoids loading addons because of DB direct access * * @throws InvalidClassStorageException in case the active backend class is invalid * @throws StorageException in case of unexpected errors during the active backend class loading */ - public function __construct(Database $dba, IManageConfigValues $config, LoggerInterface $logger, L10n $l10n) + public function __construct(Database $dba, IManageConfigValues $config, LoggerInterface $logger, L10n $l10n, bool $includeAddon = true) { $this->dba = $dba; $this->config = $config; @@ -96,8 +97,10 @@ class StorageManager /// @fixme Loading the addons & hooks here is really bad practice, but solves https://github.com/friendica/friendica/issues/11178 /// clean solution = Making Addon & Hook dynamic and load them inside the constructor, so there's no custom load logic necessary anymore - Addon::loadAddons(); - Hook::loadHooks(); + if ($includeAddon) { + Addon::loadAddons(); + Hook::loadHooks(); + } // you can only use user backends as a "default" backend, so the second parameter is true $this->currentBackend = $this->getWritableStorageByName($currentName); diff --git a/tests/src/Core/Storage/Repository/StorageManagerTest.php b/tests/src/Core/Storage/Repository/StorageManagerTest.php index 6e36821892..c387e265bf 100644 --- a/tests/src/Core/Storage/Repository/StorageManagerTest.php +++ b/tests/src/Core/Storage/Repository/StorageManagerTest.php @@ -40,7 +40,6 @@ use Friendica\DI; use Friendica\Core\Config\Factory\Config; use Friendica\Core\Config\Repository; use Friendica\Core\Storage\Type; -use Friendica\Network\HTTPClient\Client\HttpClient; use Friendica\Test\DatabaseTest; use Friendica\Test\Util\Database\StaticDatabase; use Friendica\Test\Util\VFSTrait; @@ -61,8 +60,6 @@ class StorageManagerTest extends DatabaseTest private $logger; /** @var L10n */ private $l10n; - /** @var HttpClient */ - private $httpRequest; protected function setUp(): void { @@ -92,8 +89,6 @@ class StorageManagerTest extends DatabaseTest $this->config->set('storage', 'filesystem_path', $this->root->getChild(Type\FilesystemConfig::DEFAULT_BASE_FOLDER)->url()); $this->l10n = \Mockery::mock(L10n::class); - - $this->httpRequest = \Mockery::mock(HttpClient::class); } protected function tearDown(): void @@ -108,7 +103,7 @@ class StorageManagerTest extends DatabaseTest */ public function testInstance() { - $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, $this->httpRequest); + $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false); self::assertInstanceOf(StorageManager::class, $storageManager); } @@ -170,7 +165,7 @@ class StorageManagerTest extends DatabaseTest $this->config->set('storage', 'name', $name); } - $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); + $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false); if ($interface === ICanWriteToStorage::class) { $storage = $storageManager->getWritableStorageByName($name); @@ -190,7 +185,7 @@ class StorageManagerTest extends DatabaseTest */ public function testIsValidBackend($name, $valid, $interface, $assert, $assertName) { - $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); + $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false); // true in every of the backends self::assertEquals(!empty($assertName), $storageManager->isValidBackend($name)); @@ -204,7 +199,7 @@ class StorageManagerTest extends DatabaseTest */ public function testListBackends() { - $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); + $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false); self::assertEquals(StorageManager::DEFAULT_BACKENDS, $storageManager->listBackends()); } @@ -220,7 +215,7 @@ class StorageManagerTest extends DatabaseTest static::markTestSkipped('only works for ICanWriteToStorage'); } - $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); + $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false); $selBackend = $storageManager->getWritableStorageByName($name); $storageManager->setBackend($selBackend); @@ -240,7 +235,7 @@ class StorageManagerTest extends DatabaseTest $this->expectException(InvalidClassStorageException::class); } - $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); + $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false); self::assertInstanceOf($assert, $storageManager->getBackend()); } @@ -261,7 +256,7 @@ class StorageManagerTest extends DatabaseTest ->addRule(IHandleSessions::class, ['instanceOf' => Memory::class, 'shared' => true, 'call' => null]); DI::init($dice); - $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); + $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false); self::assertTrue($storageManager->register(SampleStorageBackend::class)); @@ -289,7 +284,7 @@ class StorageManagerTest extends DatabaseTest ->addRule(IHandleSessions::class, ['instanceOf' => Memory::class, 'shared' => true, 'call' => null]); DI::init($dice); - $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); + $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false); self::assertTrue($storageManager->register(SampleStorageBackend::class)); @@ -328,7 +323,7 @@ class StorageManagerTest extends DatabaseTest $this->loadFixture(__DIR__ . '/../../../../datasets/storage/database.fixture.php', $this->dba); - $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); + $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false); $storage = $storageManager->getWritableStorageByName($name); $storageManager->move($storage); @@ -352,7 +347,7 @@ class StorageManagerTest extends DatabaseTest $this->expectException(InvalidClassStorageException::class); $this->expectExceptionMessage('Backend SystemResource is not valid'); - $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); + $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, false); $storage = $storageManager->getWritableStorageByName(SystemResource::getName()); $storageManager->move($storage); }