Merge pull request #20191 from owncloud/fix-20151

add method to count users by loginname and use it for diagnose test, …
This commit is contained in:
Thomas Müller 2015-11-02 14:51:54 +01:00
commit 44f4de1526
5 changed files with 167 additions and 3 deletions

View File

@ -672,6 +672,20 @@ class Access extends LDAPUtility implements user\IUserTools {
return $users; return $users;
} }
/**
* counts the number of users according to a provided loginName and
* utilizing the login filter.
*
* @param string $loginName
* @return array
*/
public function countUsersByLoginName($loginName) {
$loginName = $this->escapeFilterPart($loginName);
$filter = str_replace('%uid', $loginName, $this->connection->ldapLoginFilter);
$users = $this->countUsers($filter);
return $users;
}
/** /**
* @param string $filter * @param string $filter
* @param string|string[] $attr * @param string|string[] $attr

View File

@ -631,12 +631,12 @@ class Wizard extends LDAPUtility {
throw new \Exception('missing placeholder'); throw new \Exception('missing placeholder');
} }
$users = $this->access->fetchUsersByLoginName($loginName); $users = $this->access->countUsersByLoginName($loginName);
if($this->ldap->errno($cr) !== 0) { if($this->ldap->errno($cr) !== 0) {
throw new \Exception($this->ldap->error($cr)); throw new \Exception($this->ldap->error($cr));
} }
$filter = str_replace('%uid', $loginName, $this->access->connection->ldapLoginFilter); $filter = str_replace('%uid', $loginName, $this->access->connection->ldapLoginFilter);
$this->result->addChange('ldap_test_loginname', count($users)); $this->result->addChange('ldap_test_loginname', $users);
$this->result->addChange('ldap_test_effective_filter', $filter); $this->result->addChange('ldap_test_effective_filter', $filter);
return $this->result; return $this->result;
} }

View File

@ -29,5 +29,8 @@ namespace OCA\user_ldap\tests\integration;
* scope of these tests, we replace it with a mock. * scope of these tests, we replace it with a mock.
*/ */
class FakeManager extends \OCA\user_ldap\lib\user\Manager { class FakeManager extends \OCA\user_ldap\lib\user\Manager {
public function __construct() {} public function __construct() {
$this->ocConfig = \OC::$server->getConfig();
$this->image = new \OCP\Image();
}
} }

View File

@ -0,0 +1,68 @@
<?php
/**
* @author Arthur Schiwon <blizzz@owncloud.com>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
* @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/>
*
*/
namespace OCA\user_ldap\tests\integration\lib;
use OCA\user_ldap\lib\user\Manager as LDAPUserManager;
use OCA\user_ldap\tests\integration\AbstractIntegrationTest;
use OCA\User_LDAP\Mapping\UserMapping;
use OCA\user_ldap\USER_LDAP;
require_once __DIR__ . '/../../../../../lib/base.php';
class IntegrationTestUserHome extends AbstractIntegrationTest {
/**
* prepares the LDAP environment and sets up a test configuration for
* the LDAP backend.
*/
public function init() {
require(__DIR__ . '/../setup-scripts/createExplicitUsers.php');
parent::init();
}
/**
* tests countUsersByLoginName where it is expected that the login name does
* not match any LDAP user
*
* @return bool
*/
protected function case1() {
$result = $this->access->countUsersByLoginName('nothere');
return $result === 0;
}
/**
* tests countUsersByLoginName where it is expected that the login name does
* match one LDAP user
*
* @return bool
*/
protected function case2() {
$result = $this->access->countUsersByLoginName('alice');
return $result === 1;
}
}
require_once(__DIR__ . '/../setup-scripts/config.php');
$test = new IntegrationTestUserHome($host, $port, $adn, $apwd, $bdn);
$test->init();
$test->run();

View File

@ -0,0 +1,79 @@
<?php
/**
* @author Arthur Schiwon <blizzz@owncloud.com>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
* @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/>
*
*/
namespace OCA\user_ldap\tests\integration\lib;
use OCA\user_ldap\lib\user\Manager as LDAPUserManager;
use OCA\user_ldap\tests\integration\AbstractIntegrationTest;
use OCA\User_LDAP\Mapping\UserMapping;
use OCA\user_ldap\USER_LDAP;
require_once __DIR__ . '/../../../../../lib/base.php';
class IntegrationTestUserHome extends AbstractIntegrationTest {
/** @var UserMapping */
protected $mapping;
/** @var USER_LDAP */
protected $backend;
/**
* prepares the LDAP environment and sets up a test configuration for
* the LDAP backend.
*/
public function init() {
require(__DIR__ . '/../setup-scripts/createExplicitUsers.php');
parent::init();
$this->mapping = new UserMapping(\OC::$server->getDatabaseConnection());
$this->mapping->clear();
$this->access->setUserMapper($this->mapping);
$this->backend = new \OCA\user_ldap\USER_LDAP($this->access, \OC::$server->getConfig());
}
/**
* tests fetchUserByLoginName where it is expected that the login name does
* not match any LDAP user
*
* @return bool
*/
protected function case1() {
$result = $this->access->fetchUsersByLoginName('nothere');
return $result === [];
}
/**
* tests fetchUserByLoginName where it is expected that the login name does
* match one LDAP user
*
* @return bool
*/
protected function case2() {
$result = $this->access->fetchUsersByLoginName('alice');
return count($result) === 1;
}
}
require_once(__DIR__ . '/../setup-scripts/config.php');
$test = new IntegrationTestUserHome($host, $port, $adn, $apwd, $bdn);
$test->init();
$test->run();