diff options
author | Arthur Schiwon <blizzz@owncloud.com> | 2016-03-16 00:45:30 +0100 |
---|---|---|
committer | Arthur Schiwon <blizzz@owncloud.com> | 2016-03-16 14:44:18 +0100 |
commit | 8e0bd5630cef84eec17a80aab496b2086ba22673 (patch) | |
tree | bc3722d537b3a523f88e0848b4d4c0539a5f860e /apps/user_ldap/tests | |
parent | 2f5b929ee9bccc381455ab1034748c556c172fcc (diff) | |
download | nextcloud-server-8e0bd5630cef84eec17a80aab496b2086ba22673.tar.gz nextcloud-server-8e0bd5630cef84eec17a80aab496b2086ba22673.zip |
fix writing to cache when fallback server should be used immediately
Diffstat (limited to 'apps/user_ldap/tests')
-rw-r--r-- | apps/user_ldap/tests/connection.php | 78 |
1 files changed, 77 insertions, 1 deletions
diff --git a/apps/user_ldap/tests/connection.php b/apps/user_ldap/tests/connection.php index ecee25583ab..a6ccf4b340b 100644 --- a/apps/user_ldap/tests/connection.php +++ b/apps/user_ldap/tests/connection.php @@ -23,6 +23,7 @@ */ namespace OCA\user_ldap\tests; +use OCA\user_ldap\lib\Connection; /** * Class Test_Connection @@ -32,6 +33,26 @@ namespace OCA\user_ldap\tests; * @package OCA\user_ldap\tests */ class Test_Connection extends \Test\TestCase { + /** @var \OCA\user_ldap\lib\ILDAPWrapper */ + protected $ldap; + + /** @var Connection */ + protected $connection; + + public function setUp() { + parent::setUp(); + + $this->ldap = $this->getMock('\OCA\user_ldap\lib\ILDAPWrapper'); + // we use a mock here to replace the cache mechanism, due to missing DI in LDAP backend. + $this->connection = $this->getMockBuilder('OCA\user_ldap\lib\Connection') + ->setMethods(['getFromCache', 'writeToCache']) + ->setConstructorArgs([$this->ldap, '', null]) + ->getMock(); + + $this->ldap->expects($this->any()) + ->method('areLDAPFunctionsAvailable') + ->will($this->returnValue(true)); + } public function testOriginalAgentUnchangedOnClone() { //background: upon login a bind is done with the user credentials @@ -39,7 +60,7 @@ class Test_Connection extends \Test\TestCase { //to the agent's credentials $lw = $this->getMock('\OCA\user_ldap\lib\ILDAPWrapper'); - $connection = new \OCA\user_ldap\lib\Connection($lw, '', null); + $connection = new Connection($lw, '', null); $agent = array( 'ldapAgentName' => 'agent', 'ldapAgentPassword' => '123456', @@ -60,4 +81,59 @@ class Test_Connection extends \Test\TestCase { $this->assertSame($agentPawd, $agent['ldapAgentPassword']); } + public function testUseBackupServer() { + $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') + ->will($this->returnValue(true)); + + $this->ldap->expects($this->any()) + ->method('setOption') + ->will($this->returnValue(true)); + + $this->ldap->expects($this->exactly(3)) + ->method('connect') + ->will($this->returnValue('ldapResource')); + + // Not called often enough? Then, the fallback to the backup server is broken. + $this->connection->expects($this->exactly(4)) + ->method('getFromCache') + ->with('overrideMainServer') + ->will($this->onConsecutiveCalls(false, false, true, true)); + + $this->connection->expects($this->once()) + ->method('writeToCache') + ->with('overrideMainServer', true); + + $isThrown = false; + $this->ldap->expects($this->exactly(3)) + ->method('bind') + ->will($this->returnCallback(function () use (&$isThrown) { + if(!$isThrown) { + $isThrown = true; + throw new \OC\ServerNotAvailableException(); + } + return true; + })); + + $this->connection->init(); + $this->connection->resetConnectionResource(); + // with the second init() we test whether caching works + $this->connection->init(); + } + } |