Add ExternalStorage dependency to StorageManager

- Since ExternalStorage isn't instantiated automatically by Dice, we have to provide the dependency manually in StorageManager->getByName
- This requires StorageManager to take one one additional dependency
- Tests are updated with this additional dependency
pull/10441/head
Hypolite Petovan 2021-06-27 22:39:02 -04:00
rodzic faac5b71ce
commit 681c7c0187
2 zmienionych plików z 24 dodań i 15 usunięć

Wyświetl plik

@ -25,6 +25,7 @@ use Exception;
use Friendica\Core\Config\IConfig; use Friendica\Core\Config\IConfig;
use Friendica\Database\Database; use Friendica\Database\Database;
use Friendica\Model\Storage; use Friendica\Model\Storage;
use Friendica\Network\IHTTPRequest;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
@ -60,6 +61,8 @@ class StorageManager
private $logger; private $logger;
/** @var L10n */ /** @var L10n */
private $l10n; private $l10n;
/** @var IHTTPRequest */
private $httpRequest;
/** @var Storage\IStorage */ /** @var Storage\IStorage */
private $currentBackend; private $currentBackend;
@ -70,12 +73,13 @@ class StorageManager
* @param LoggerInterface $logger * @param LoggerInterface $logger
* @param L10n $l10n * @param L10n $l10n
*/ */
public function __construct(Database $dba, IConfig $config, LoggerInterface $logger, L10n $l10n) public function __construct(Database $dba, IConfig $config, LoggerInterface $logger, L10n $l10n, IHTTPRequest $httpRequest)
{ {
$this->dba = $dba; $this->dba = $dba;
$this->config = $config; $this->config = $config;
$this->logger = $logger; $this->logger = $logger;
$this->l10n = $l10n; $this->l10n = $l10n;
$this->httpRequest = $httpRequest;
$this->backends = $config->get('storage', 'backends', self::DEFAULT_BACKENDS); $this->backends = $config->get('storage', 'backends', self::DEFAULT_BACKENDS);
$currentName = $this->config->get('storage', 'name', ''); $currentName = $this->config->get('storage', 'name', '');
@ -127,7 +131,7 @@ class StorageManager
$this->backendInstances[$name] = new Storage\SystemResource(); $this->backendInstances[$name] = new Storage\SystemResource();
break; break;
case Storage\ExternalResource::getName(): case Storage\ExternalResource::getName():
$this->backendInstances[$name] = new Storage\ExternalResource(); $this->backendInstances[$name] = new Storage\ExternalResource($this->httpRequest);
break; break;
default: default:
$data = [ $data = [

Wyświetl plik

@ -35,6 +35,7 @@ use Friendica\Model\Config\Config;
use Friendica\Model\Storage; use Friendica\Model\Storage;
use Friendica\Core\Session; use Friendica\Core\Session;
use Friendica\Model\Storage\StorageException; use Friendica\Model\Storage\StorageException;
use Friendica\Network\HTTPRequest;
use Friendica\Test\DatabaseTest; use Friendica\Test\DatabaseTest;
use Friendica\Test\Util\Database\StaticDatabase; use Friendica\Test\Util\Database\StaticDatabase;
use Friendica\Test\Util\VFSTrait; use Friendica\Test\Util\VFSTrait;
@ -54,6 +55,8 @@ class StorageManagerTest extends DatabaseTest
private $logger; private $logger;
/** @var L10n */ /** @var L10n */
private $l10n; private $l10n;
/** @var HTTPRequest */
private $httpRequest;
use VFSTrait; use VFSTrait;
@ -79,6 +82,8 @@ class StorageManagerTest extends DatabaseTest
$this->config = new PreloadConfig($configCache, $configModel); $this->config = new PreloadConfig($configCache, $configModel);
$this->l10n = \Mockery::mock(L10n::class); $this->l10n = \Mockery::mock(L10n::class);
$this->httpRequest = \Mockery::mock(HTTPRequest::class);
} }
/** /**
@ -86,7 +91,7 @@ class StorageManagerTest extends DatabaseTest
*/ */
public function testInstance() public function testInstance()
{ {
$storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, $this->httpRequest);
self::assertInstanceOf(StorageManager::class, $storageManager); self::assertInstanceOf(StorageManager::class, $storageManager);
} }
@ -168,7 +173,7 @@ class StorageManagerTest extends DatabaseTest
*/ */
public function testGetByName($name, $assert, $assertName, $userBackend) public function testGetByName($name, $assert, $assertName, $userBackend)
{ {
$storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, $this->httpRequest);
$storage = $storageManager->getByName($name, $userBackend); $storage = $storageManager->getByName($name, $userBackend);
@ -188,7 +193,7 @@ class StorageManagerTest extends DatabaseTest
*/ */
public function testIsValidBackend($name, $assert, $assertName, $userBackend) public function testIsValidBackend($name, $assert, $assertName, $userBackend)
{ {
$storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, $this->httpRequest);
// true in every of the backends // true in every of the backends
self::assertEquals(!empty($assertName), $storageManager->isValidBackend($name)); self::assertEquals(!empty($assertName), $storageManager->isValidBackend($name));
@ -202,7 +207,7 @@ class StorageManagerTest extends DatabaseTest
*/ */
public function testListBackends() 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, $this->httpRequest);
self::assertEquals(StorageManager::DEFAULT_BACKENDS, $storageManager->listBackends()); self::assertEquals(StorageManager::DEFAULT_BACKENDS, $storageManager->listBackends());
} }
@ -214,7 +219,7 @@ class StorageManagerTest extends DatabaseTest
*/ */
public function testGetBackend($name, $assert, $assertName, $userBackend) public function testGetBackend($name, $assert, $assertName, $userBackend)
{ {
$storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, $this->httpRequest);
self::assertNull($storageManager->getBackend()); self::assertNull($storageManager->getBackend());
@ -235,7 +240,7 @@ class StorageManagerTest extends DatabaseTest
{ {
$this->config->set('storage', 'name', $name); $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, $this->httpRequest);
if ($userBackend) { if ($userBackend) {
self::assertInstanceOf($assert, $storageManager->getBackend()); self::assertInstanceOf($assert, $storageManager->getBackend());
@ -260,7 +265,7 @@ class StorageManagerTest extends DatabaseTest
->addRule(ISession::class, ['instanceOf' => Session\Memory::class, 'shared' => true, 'call' => null]); ->addRule(ISession::class, ['instanceOf' => Session\Memory::class, 'shared' => true, 'call' => null]);
DI::init($dice); 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, $this->httpRequest);
self::assertTrue($storageManager->register(SampleStorageBackend::class)); self::assertTrue($storageManager->register(SampleStorageBackend::class));
@ -301,7 +306,7 @@ class StorageManagerTest extends DatabaseTest
$this->loadFixture(__DIR__ . '/../../datasets/storage/database.fixture.php', $this->dba); $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, $this->httpRequest);
$storage = $storageManager->getByName($name); $storage = $storageManager->getByName($name);
$storageManager->move($storage); $storageManager->move($storage);
@ -326,7 +331,7 @@ class StorageManagerTest extends DatabaseTest
$this->expectExceptionMessage("Can't move to storage backend 'SystemResource'"); $this->expectExceptionMessage("Can't move to storage backend 'SystemResource'");
$this->expectException(StorageException::class); $this->expectException(StorageException::class);
$storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n); $storageManager = new StorageManager($this->dba, $this->config, $this->logger, $this->l10n, $this->httpRequest);
$storage = $storageManager->getByName(Storage\SystemResource::getName()); $storage = $storageManager->getByName(Storage\SystemResource::getName());
$storageManager->move($storage); $storageManager->move($storage);
} }