diff --git a/tests/Integration/Framework/Caching.php b/tests/Integration/Framework/Caching.php new file mode 100644 index 0000000000..baf9001f0d --- /dev/null +++ b/tests/Integration/Framework/Caching.php @@ -0,0 +1,50 @@ + 'mail-integration-tests', + Server::get(LoggerInterface::class), + Server::get(IProfiler::class), + $config->getSystemValue('memcache.local', null), + $config->getSystemValue('memcache.distributed', null), + $config->getSystemValue('memcache.locking', null), + $config->getSystemValueString('redis_log_file') + ); + $imapClient = new IMAPClientFactory( + $crypto ?? Server::get(ICrypto::class), + $config, + $cacheFactory, + Server::get(IEventDispatcher::class), + Server::get(ITimeFactory::class), + Server::get(CacheFactory::class), + ); + return [$imapClient, $cacheFactory]; + } +} diff --git a/tests/Integration/IMAP/IMAPClientFactoryTest.php b/tests/Integration/IMAP/IMAPClientFactoryTest.php index 73bd65a816..34ba89ca30 100644 --- a/tests/Integration/IMAP/IMAPClientFactoryTest.php +++ b/tests/Integration/IMAP/IMAPClientFactoryTest.php @@ -14,9 +14,11 @@ use Horde_Imap_Client_Socket; use OC\Memcache\Redis; use OCA\Mail\Account; +use OCA\Mail\Cache\CacheFactory; use OCA\Mail\Db\MailAccount; use OCA\Mail\IMAP\HordeImapClient; use OCA\Mail\IMAP\IMAPClientFactory; +use OCA\Mail\Tests\Integration\Framework\Caching; use OCP\AppFramework\Utility\ITimeFactory; use OCP\EventDispatcher\IEventDispatcher; use OCP\ICacheFactory; @@ -40,6 +42,7 @@ class IMAPClientFactoryTest extends TestCase { private $factory; private IEventDispatcher|MockObject $eventDispatcher; private ITimeFactory|MockObject $timeFactory; + private CacheFactory|MockObject $hordeCacheFactory; protected function setUp(): void { parent::setUp(); @@ -49,6 +52,7 @@ protected function setUp(): void { $this->cacheFactory = Server::get(ICacheFactory::class); $this->eventDispatcher = $this->createMock(IEventDispatcher::class); $this->timeFactory = $this->createMock(ITimeFactory::class); + $this->hordeCacheFactory = $this->createMock(CacheFactory::class); $this->factory = new IMAPClientFactory( $this->crypto, @@ -56,6 +60,7 @@ protected function setUp(): void { $this->cacheFactory, $this->eventDispatcher, $this->timeFactory, + $this->hordeCacheFactory, ); } @@ -106,13 +111,21 @@ public function testRateLimiting(): void { if (ltrim($cacheClass, '\\') !== Redis::class) { $this->markTestSkipped('Redis not available. Found ' . $cacheClass); } + + [$imapClientFactory, $cacheFactory] = Caching::getImapClientFactoryAndConfiguredCacheFactory($this->crypto); + $this->assertInstanceOf( + Redis::class, + $cacheFactory->createDistributed(), + 'Distributed cache is not Redis', + ); + $account = $this->getTestAccount(); $this->crypto->expects($this->once()) ->method('decrypt') ->with('encrypted') ->willReturn('notmypassword'); - $client = $this->factory->getClient($account); + $client = $imapClientFactory->getClient($account); self::assertInstanceOf(HordeImapClient::class, $client); foreach ([1, 2, 3] as $attempts) { try {