add method to count users by loginname and use it for diagnose test, fixes #20151
This commit is contained in:
parent
6911d8f0a4
commit
16aa339475
5 changed files with 167 additions and 3 deletions
|
@ -671,6 +671,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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
|
@ -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();
|
Loading…
Reference in a new issue