diff options
Diffstat (limited to 'apps/federation/tests/Controller/OCSAuthAPIControllerTest.php')
-rw-r--r-- | apps/federation/tests/Controller/OCSAuthAPIControllerTest.php | 125 |
1 files changed, 47 insertions, 78 deletions
diff --git a/apps/federation/tests/Controller/OCSAuthAPIControllerTest.php b/apps/federation/tests/Controller/OCSAuthAPIControllerTest.php index f48c8352ae1..a054277c5cd 100644 --- a/apps/federation/tests/Controller/OCSAuthAPIControllerTest.php +++ b/apps/federation/tests/Controller/OCSAuthAPIControllerTest.php @@ -1,71 +1,40 @@ <?php + +declare(strict_types=1); /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Bjoern Schiessle <bjoern@schiessle.org> - * @author Björn Schießle <bjoern@schiessle.org> - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <robin@icewind.nl> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * 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, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ namespace OCA\Federation\Tests\Controller; use OC\BackgroundJob\JobList; +use OCA\Federation\BackgroundJob\GetSharedSecret; use OCA\Federation\Controller\OCSAuthAPIController; use OCA\Federation\DbHandler; use OCA\Federation\TrustedServers; use OCP\AppFramework\OCS\OCSForbiddenException; use OCP\AppFramework\Utility\ITimeFactory; -use OCP\ILogger; use OCP\IRequest; +use OCP\Security\Bruteforce\IThrottler; use OCP\Security\ISecureRandom; +use PHPUnit\Framework\MockObject\MockObject; +use Psr\Log\LoggerInterface; use Test\TestCase; class OCSAuthAPIControllerTest extends TestCase { - - /** @var \PHPUnit\Framework\MockObject\MockObject|IRequest */ - private $request; - - /** @var \PHPUnit\Framework\MockObject\MockObject|ISecureRandom */ - private $secureRandom; - - /** @var \PHPUnit\Framework\MockObject\MockObject|JobList */ - private $jobList; - - /** @var \PHPUnit\Framework\MockObject\MockObject|TrustedServers */ - private $trustedServers; - - /** @var \PHPUnit\Framework\MockObject\MockObject|DbHandler */ - private $dbHandler; - - /** @var \PHPUnit\Framework\MockObject\MockObject|ILogger */ - private $logger; - - /** @var \PHPUnit\Framework\MockObject\MockObject|ITimeFactory */ - private $timeFactory; - - - /** @var OCSAuthAPIController */ - private $ocsAuthApi; + private IRequest&MockObject $request; + private ISecureRandom&MockObject $secureRandom; + private JobList&MockObject $jobList; + private TrustedServers&MockObject $trustedServers; + private DbHandler&MockObject $dbHandler; + private LoggerInterface&MockObject $logger; + private ITimeFactory&MockObject $timeFactory; + private IThrottler&MockObject $throttler; + private OCSAuthAPIController $ocsAuthApi; /** @var int simulated timestamp */ - private $currentTime = 1234567; + private int $currentTime = 1234567; protected function setUp(): void { parent::setUp(); @@ -75,9 +44,9 @@ class OCSAuthAPIControllerTest extends TestCase { $this->trustedServers = $this->createMock(TrustedServers::class); $this->dbHandler = $this->createMock(DbHandler::class); $this->jobList = $this->createMock(JobList::class); - $this->logger = $this->createMock(ILogger::class); + $this->logger = $this->createMock(LoggerInterface::class); $this->timeFactory = $this->createMock(ITimeFactory::class); - + $this->throttler = $this->createMock(IThrottler::class); $this->ocsAuthApi = new OCSAuthAPIController( 'federation', @@ -87,22 +56,16 @@ class OCSAuthAPIControllerTest extends TestCase { $this->trustedServers, $this->dbHandler, $this->logger, - $this->timeFactory + $this->timeFactory, + $this->throttler ); $this->timeFactory->method('getTime') ->willReturn($this->currentTime); } - /** - * @dataProvider dataTestRequestSharedSecret - * - * @param string $token - * @param string $localToken - * @param bool $isTrustedServer - * @param bool $ok - */ - public function testRequestSharedSecret($token, $localToken, $isTrustedServer, $ok) { + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestRequestSharedSecret')] + public function testRequestSharedSecret(string $token, string $localToken, bool $isTrustedServer, bool $ok): void { $url = 'url'; $this->trustedServers @@ -113,12 +76,18 @@ class OCSAuthAPIControllerTest extends TestCase { if ($ok) { $this->jobList->expects($this->once())->method('add') - ->with('OCA\Federation\BackgroundJob\GetSharedSecret', ['url' => $url, 'token' => $token, 'created' => $this->currentTime]); + ->with(GetSharedSecret::class, ['url' => $url, 'token' => $token, 'created' => $this->currentTime]); } else { $this->jobList->expects($this->never())->method('add'); $this->jobList->expects($this->never())->method('remove'); + if (!$isTrustedServer) { + $this->throttler->expects($this->once()) + ->method('registerAttempt') + ->with('federationSharedSecret'); + } } + try { $this->ocsAuthApi->requestSharedSecret($url, $token); $this->assertTrue($ok); @@ -127,7 +96,7 @@ class OCSAuthAPIControllerTest extends TestCase { } } - public function dataTestRequestSharedSecret() { + public static function dataTestRequestSharedSecret(): array { return [ ['token2', 'token1', true, true], ['token1', 'token2', false, false], @@ -135,19 +104,13 @@ class OCSAuthAPIControllerTest extends TestCase { ]; } - /** - * @dataProvider dataTestGetSharedSecret - * - * @param bool $isTrustedServer - * @param bool $isValidToken - * @param bool $ok - */ - public function testGetSharedSecret($isTrustedServer, $isValidToken, $ok) { + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestGetSharedSecret')] + public function testGetSharedSecret(bool $isTrustedServer, bool $isValidToken, bool $ok): void { $url = 'url'; $token = 'token'; - /** @var OCSAuthAPIController | \PHPUnit\Framework\MockObject\MockObject $ocsAuthApi */ - $ocsAuthApi = $this->getMockBuilder('OCA\Federation\Controller\OCSAuthAPIController') + /** @var OCSAuthAPIController&MockObject $ocsAuthApi */ + $ocsAuthApi = $this->getMockBuilder(OCSAuthAPIController::class) ->setConstructorArgs( [ 'federation', @@ -157,9 +120,12 @@ class OCSAuthAPIControllerTest extends TestCase { $this->trustedServers, $this->dbHandler, $this->logger, - $this->timeFactory + $this->timeFactory, + $this->throttler ] - )->setMethods(['isValidToken'])->getMock(); + ) + ->onlyMethods(['isValidToken']) + ->getMock(); $this->trustedServers ->expects($this->any()) @@ -171,10 +137,13 @@ class OCSAuthAPIControllerTest extends TestCase { $this->secureRandom->expects($this->once())->method('generate')->with(32) ->willReturn('secret'); $this->trustedServers->expects($this->once()) - ->method('addSharedSecret')->willReturn($url, 'secret'); + ->method('addSharedSecret')->with($url, 'secret'); } else { $this->secureRandom->expects($this->never())->method('generate'); $this->trustedServers->expects($this->never())->method('addSharedSecret'); + $this->throttler->expects($this->once()) + ->method('registerAttempt') + ->with('federationSharedSecret'); } try { @@ -187,7 +156,7 @@ class OCSAuthAPIControllerTest extends TestCase { } } - public function dataTestGetSharedSecret() { + public static function dataTestGetSharedSecret(): array { return [ [true, true, true], [false, true, false], |