aboutsummaryrefslogtreecommitdiffstats
path: root/apps/user_ldap/tests/ConnectionTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/user_ldap/tests/ConnectionTest.php')
-rw-r--r--apps/user_ldap/tests/ConnectionTest.php165
1 files changed, 95 insertions, 70 deletions
diff --git a/apps/user_ldap/tests/ConnectionTest.php b/apps/user_ldap/tests/ConnectionTest.php
index c0f91d25d39..7116e15898f 100644
--- a/apps/user_ldap/tests/ConnectionTest.php
+++ b/apps/user_ldap/tests/ConnectionTest.php
@@ -1,34 +1,17 @@
<?php
+
+declare(strict_types=1);
/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
- * @author Jarkko Lehtoranta <devel@jlranta.com>
- * @author Joas Schilling <coding@schilljs.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- * @author Victor Dubiniuk <dubiniuk@owncloud.com>
- *
- * @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\User_LDAP\Tests;
+
+use OC\ServerNotAvailableException;
use OCA\User_LDAP\Connection;
use OCA\User_LDAP\ILDAPWrapper;
+use PHPUnit\Framework\MockObject\MockObject;
/**
* Class Test_Connection
@@ -38,45 +21,42 @@ use OCA\User_LDAP\ILDAPWrapper;
* @package OCA\User_LDAP\Tests
*/
class ConnectionTest extends \Test\TestCase {
- /** @var \OCA\User_LDAP\ILDAPWrapper */
- protected $ldap;
-
- /** @var Connection */
- protected $connection;
+ protected ILDAPWrapper&MockObject $ldap;
+ protected Connection $connection;
- public function setUp() {
+ protected function setUp(): void {
parent::setUp();
- $this->ldap = $this->createMock(ILDAPWrapper::class);
+ $this->ldap = $this->createMock(ILDAPWrapper::class);
// we use a mock here to replace the cache mechanism, due to missing DI in LDAP backend.
- $this->connection = $this->getMockBuilder('OCA\User_LDAP\Connection')
- ->setMethods(['getFromCache', 'writeToCache'])
+ $this->connection = $this->getMockBuilder(Connection::class)
+ ->onlyMethods(['getFromCache', 'writeToCache'])
->setConstructorArgs([$this->ldap, '', null])
->getMock();
$this->ldap->expects($this->any())
->method('areLDAPFunctionsAvailable')
- ->will($this->returnValue(true));
+ ->willReturn(true);
}
- public function testOriginalAgentUnchangedOnClone() {
+ public function testOriginalAgentUnchangedOnClone(): void {
//background: upon login a bind is done with the user credentials
//which is valid for the whole LDAP resource. It needs to be reset
//to the agent's credentials
- $lw = $this->createMock(ILDAPWrapper::class);
+ $lw = $this->createMock(ILDAPWrapper::class);
$connection = new Connection($lw, '', null);
- $agent = array(
+ $agent = [
'ldapAgentName' => 'agent',
'ldapAgentPassword' => '123456',
- );
+ ];
$connection->setConfiguration($agent);
$testConnection = clone $connection;
- $user = array(
+ $user = [
'ldapAgentName' => 'user',
'ldapAgentPassword' => 'password',
- );
+ ];
$testConnection->setConfiguration($user);
$agentName = $connection->ldapAgentName;
@@ -86,7 +66,7 @@ class ConnectionTest extends \Test\TestCase {
$this->assertSame($agentPawd, $agent['ldapAgentPassword']);
}
- public function testUseBackupServer() {
+ public function testUseBackupServer(): void {
$mainHost = 'ldap://nixda.ldap';
$backupHost = 'ldap://fallback.ldap';
$config = [
@@ -104,25 +84,24 @@ class ConnectionTest extends \Test\TestCase {
$this->ldap->expects($this->any())
->method('isResource')
- ->will($this->returnValue(true));
+ ->willReturn(true);
$this->ldap->expects($this->any())
->method('setOption')
- ->will($this->returnValue(true));
+ ->willReturn(true);
$this->ldap->expects($this->exactly(3))
->method('connect')
- ->will($this->returnValue('ldapResource'));
+ ->willReturn(ldap_connect('ldap://example.com'));
$this->ldap->expects($this->any())
->method('errno')
- ->will($this->returnValue(0));
+ ->willReturn(0);
// Not called often enough? Then, the fallback to the backup server is broken.
- $this->connection->expects($this->exactly(4))
+ $this->connection->expects($this->exactly(2))
->method('getFromCache')
- ->with('overrideMainServer')
- ->will($this->onConsecutiveCalls(false, false, true, true));
+ ->with('overrideMainServer')->willReturnOnConsecutiveCalls(false, false, true, true);
$this->connection->expects($this->once())
->method('writeToCache')
@@ -131,13 +110,13 @@ class ConnectionTest extends \Test\TestCase {
$isThrown = false;
$this->ldap->expects($this->exactly(3))
->method('bind')
- ->will($this->returnCallback(function () use (&$isThrown) {
- if(!$isThrown) {
+ ->willReturnCallback(function () use (&$isThrown) {
+ if (!$isThrown) {
$isThrown = true;
- throw new \OC\ServerNotAvailableException();
+ throw new ServerNotAvailableException();
}
return true;
- }));
+ });
$this->connection->init();
$this->connection->resetConnectionResource();
@@ -145,7 +124,54 @@ class ConnectionTest extends \Test\TestCase {
$this->connection->init();
}
- public function testBindWithInvalidCredentials() {
+ public function testDontUseBackupServerOnFailedAuth(): void {
+ $mainHost = 'ldap://nixda.ldap';
+ $backupHost = 'ldap://fallback.ldap';
+ $config = [
+ 'ldapConfigurationActive' => true,
+ 'ldapHost' => $mainHost,
+ 'ldapPort' => 389,
+ 'ldapBackupHost' => $backupHost,
+ 'ldapBackupPort' => 389,
+ 'ldapAgentName' => 'uid=agent',
+ 'ldapAgentPassword' => 'SuchASecret'
+ ];
+
+ $this->connection->setIgnoreValidation(true);
+ $this->connection->setConfiguration($config);
+
+ $this->ldap->expects($this->any())
+ ->method('isResource')
+ ->willReturn(true);
+
+ $this->ldap->expects($this->any())
+ ->method('setOption')
+ ->willReturn(true);
+
+ $this->ldap->expects($this->once())
+ ->method('connect')
+ ->willReturn(ldap_connect('ldap://example.com'));
+
+ $this->ldap->expects($this->any())
+ ->method('errno')
+ ->willReturn(49);
+
+ $this->connection->expects($this->any())
+ ->method('getFromCache')
+ ->with('overrideMainServer')
+ ->willReturn(false);
+
+ $this->connection->expects($this->never())
+ ->method('writeToCache');
+
+ $this->ldap->expects($this->exactly(1))
+ ->method('bind')
+ ->willReturn(false);
+
+ $this->connection->init();
+ }
+
+ public function testBindWithInvalidCredentials(): void {
// background: Bind with invalid credentials should return false
// and not throw a ServerNotAvailableException.
@@ -164,33 +190,33 @@ class ConnectionTest extends \Test\TestCase {
$this->ldap->expects($this->any())
->method('isResource')
- ->will($this->returnValue(true));
+ ->willReturn(true);
$this->ldap->expects($this->any())
->method('setOption')
- ->will($this->returnValue(true));
+ ->willReturn(true);
$this->ldap->expects($this->any())
->method('connect')
- ->will($this->returnValue('ldapResource'));
+ ->willReturn(ldap_connect('ldap://example.com'));
- $this->ldap->expects($this->exactly(2))
+ $this->ldap->expects($this->once())
->method('bind')
- ->will($this->returnValue(false));
+ ->willReturn(false);
// LDAP_INVALID_CREDENTIALS
$this->ldap->expects($this->any())
->method('errno')
- ->will($this->returnValue(0x31));
+ ->willReturn(0x31);
try {
$this->assertFalse($this->connection->bind(), 'Connection::bind() should not return true with invalid credentials.');
- } catch (\OC\ServerNotAvailableException $e) {
+ } catch (ServerNotAvailableException $e) {
$this->fail('Failed asserting that exception of type "OC\ServerNotAvailableException" is not thrown.');
}
}
- public function testStartTlsNegotiationFailure() {
+ public function testStartTlsNegotiationFailure(): void {
// background: If Start TLS negotiation fails,
// a ServerNotAvailableException should be thrown.
@@ -211,32 +237,31 @@ class ConnectionTest extends \Test\TestCase {
$this->ldap->expects($this->any())
->method('isResource')
- ->will($this->returnValue(true));
+ ->willReturn(true);
$this->ldap->expects($this->any())
->method('connect')
- ->will($this->returnValue('ldapResource'));
+ ->willReturn(ldap_connect('ldap://example.com'));
$this->ldap->expects($this->any())
->method('setOption')
- ->will($this->returnValue(true));
+ ->willReturn(true);
$this->ldap->expects($this->any())
->method('bind')
- ->will($this->returnValue(true));
+ ->willReturn(true);
$this->ldap->expects($this->any())
->method('errno')
- ->will($this->returnValue(0));
+ ->willReturn(0);
$this->ldap->expects($this->any())
->method('startTls')
- ->will($this->returnValue(false));
+ ->willReturn(false);
- $this->expectException(\OC\ServerNotAvailableException::class);
+ $this->expectException(ServerNotAvailableException::class);
$this->expectExceptionMessage('Start TLS failed, when connecting to LDAP host ' . $host . '.');
$this->connection->init();
}
-
}