]> source.dussan.org Git - nextcloud-server.git/commitdiff
chore(tests): add tests for handleLoginFailed 37227/head
authorDaniel Kesselberg <mail@danielkesselberg.de>
Tue, 21 Feb 2023 22:20:55 +0000 (23:20 +0100)
committerDaniel Kesselberg <mail@danielkesselberg.de>
Fri, 10 Mar 2023 17:04:39 +0000 (18:04 +0100)
Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
tests/lib/User/SessionTest.php

index 735a3b3d06a8b969744ac350da3b0deb4327dff1..4928744ed1c4c3c0b7c483efa8f7dc5567efdec0 100644 (file)
@@ -9,6 +9,7 @@
 namespace Test\User;
 
 use OC\AppFramework\Http\Request;
+use OC\Authentication\Events\LoginFailed;
 use OC\Authentication\Exceptions\InvalidTokenException;
 use OC\Authentication\Exceptions\PasswordLoginForbiddenException;
 use OC\Authentication\Token\IProvider;
@@ -1057,4 +1058,100 @@ class SessionTest extends \Test\TestCase {
 
                $this->userSession->updateTokens('uid', 'pass');
        }
+
+       public function testLogClientInThrottlerUsername() {
+               $manager = $this->createMock(Manager::class);
+               $session = $this->createMock(ISession::class);
+               $request = $this->createMock(IRequest::class);
+
+               /** @var Session $userSession */
+               $userSession = $this->getMockBuilder(Session::class)
+                       ->setConstructorArgs([$manager, $session, $this->timeFactory, $this->tokenProvider, $this->config, $this->random, $this->lockdownManager, $this->logger, $this->dispatcher])
+                       ->setMethods(['isTokenPassword', 'login', 'supportsCookies', 'createSessionToken', 'getUser'])
+                       ->getMock();
+
+               $userSession->expects($this->once())
+                       ->method('isTokenPassword')
+                       ->willReturn(true);
+               $userSession->expects($this->once())
+                       ->method('login')
+                       ->with('john', 'I-AM-AN-PASSWORD')
+                       ->willReturn(false);
+
+               $session->expects($this->never())
+                       ->method('set');
+               $request
+                       ->method('getRemoteAddress')
+                       ->willReturn('192.168.0.1');
+               $this->throttler
+                       ->expects($this->exactly(2))
+                       ->method('sleepDelay')
+                       ->with('192.168.0.1');
+               $this->throttler
+                       ->expects($this->any())
+                       ->method('getDelay')
+                       ->with('192.168.0.1')
+                       ->willReturn(0);
+
+               $this->throttler
+                       ->expects($this->once())
+                       ->method('registerAttempt')
+                       ->with('login', '192.168.0.1', ['user' => 'john']);
+               $this->dispatcher
+                       ->expects($this->once())
+                       ->method('dispatchTyped')
+                       ->with(new LoginFailed('john', 'I-AM-AN-PASSWORD'));
+
+               $this->assertFalse($userSession->logClientIn('john', 'I-AM-AN-PASSWORD', $request, $this->throttler));
+       }
+
+       public function testLogClientInThrottlerEmail() {
+               $manager = $this->createMock(Manager::class);
+               $session = $this->createMock(ISession::class);
+               $request = $this->createMock(IRequest::class);
+
+               /** @var Session $userSession */
+               $userSession = $this->getMockBuilder(Session::class)
+                       ->setConstructorArgs([$manager, $session, $this->timeFactory, $this->tokenProvider, $this->config, $this->random, $this->lockdownManager, $this->logger, $this->dispatcher])
+                       ->setMethods(['isTokenPassword', 'login', 'supportsCookies', 'createSessionToken', 'getUser'])
+                       ->getMock();
+
+               $userSession->expects($this->once())
+                       ->method('isTokenPassword')
+                       ->willReturn(true);
+               $userSession->expects($this->once())
+                       ->method('login')
+                       ->with('john@foo.bar', 'I-AM-AN-PASSWORD')
+                       ->willReturn(false);
+               $manager
+                       ->method('getByEmail')
+                       ->with('john@foo.bar')
+                       ->willReturn([]);
+
+               $session->expects($this->never())
+                       ->method('set');
+               $request
+                       ->method('getRemoteAddress')
+                       ->willReturn('192.168.0.1');
+               $this->throttler
+                       ->expects($this->exactly(2))
+                       ->method('sleepDelay')
+                       ->with('192.168.0.1');
+               $this->throttler
+                       ->expects($this->any())
+                       ->method('getDelay')
+                       ->with('192.168.0.1')
+                       ->willReturn(0);
+
+               $this->throttler
+                       ->expects($this->once())
+                       ->method('registerAttempt')
+                       ->with('login', '192.168.0.1', ['user' => 'john@foo.bar']);
+               $this->dispatcher
+                       ->expects($this->once())
+                       ->method('dispatchTyped')
+                       ->with(new LoginFailed('john@foo.bar', 'I-AM-AN-PASSWORD'));
+
+               $this->assertFalse($userSession->logClientIn('john@foo.bar', 'I-AM-AN-PASSWORD', $request, $this->throttler));
+       }
 }