server/apps/user_ldap/tests/wizard.php
Arthur Schiwon 452efa5fab Port of LDAP Wizard: get correct total no of users, groups and complete list of groups on big setups #9002
fix PHPdoc

Conflicts:
	apps/user_ldap/lib/connection.php

add method to count groups on LDAP

Conflicts:
	apps/user_ldap/lib/access.php

LDAP Wizard: count users and groups with the power of paged search

Conflicts:
	apps/user_ldap/lib/wizard.php

consolidate requirement check

fix PHPdoc

Conflicts:
	apps/user_ldap/lib/access.php

Wizard: get really all groups from LDAP by power of Paged Search

Conflicts:
	apps/user_ldap/lib/wizard.php

make all this work in an early configuration state in the wizard by marking  the config active and ignoring the validation state.

Conflicts:
	apps/user_ldap/lib/connection.php

simplify two methods a bit, because they are not used for group search anymore

Conflicts:
	apps/user_ldap/lib/wizard.php

remove unused vars; increase scrutinizer happiness
2014-06-25 11:45:55 +02:00

210 lines
5.7 KiB
PHP

<?php
/**
* ownCloud
*
* @author Arthur Schiwon
* @copyright 2014 Arthur Schiwon blizzz@owncloud.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library 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 along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\user_ldap\tests;
use \OCA\user_ldap\lib\Wizard;
// use \OCA\user_ldap\USER_LDAP as UserLDAP;
// use \OCA\user_ldap\lib\Access;
// use \OCA\user_ldap\lib\Configuration;
// use \OCA\user_ldap\lib\ILDAPWrapper;
class Test_Wizard extends \PHPUnit_Framework_TestCase {
public function setUp() {
//we need to make sure the consts are defined, otherwise tests will fail
//on systems without php5_ldap
$ldapConsts = array('LDAP_OPT_PROTOCOL_VERSION',
'LDAP_OPT_REFERRALS', 'LDAP_OPT_NETWORK_TIMEOUT');
foreach($ldapConsts as $const) {
if(!defined($const)) {
define($const, 42);
}
}
}
private function getWizardAndMocks() {
static $conMethods;
if(is_null($conMethods)) {
$conMethods = get_class_methods('\OCA\user_ldap\lib\Configuration');
}
$lw = $this->getMock('\OCA\user_ldap\lib\ILDAPWrapper');
$conf = $this->getMock('\OCA\user_ldap\lib\Configuration',
$conMethods,
array($lw, null, null));
return array(new Wizard($conf, $lw), $conf, $lw);
}
private function prepareLdapWrapperForConnections(&$ldap) {
$ldap->expects($this->once())
->method('connect')
//dummy value, usually invalid
->will($this->returnValue(true));
$ldap->expects($this->exactly(3))
->method('setOption')
->will($this->returnValue(true));
$ldap->expects($this->once())
->method('bind')
->will($this->returnValue(true));
}
public function testCumulativeSearchOnAttributeLimited() {
list($wizard, $configuration, $ldap) = $this->getWizardAndMocks();
$configuration->expects($this->any())
->method('__get')
->will($this->returnCallback(function($name) {
if($name === 'ldapBase') {
return array('base');
}
return null;
}));
$this->prepareLdapWrapperForConnections($ldap);
$ldap->expects($this->any())
->method('isResource')
->will($this->returnValue(true));
$ldap->expects($this->exactly(2))
->method('search')
//dummy value, usually invalid
->will($this->returnValue(true));
$ldap->expects($this->exactly(2))
->method('countEntries')
//an is_resource check will follow, so we need to return a dummy resource
->will($this->returnValue(23));
//5 DNs per filter means 2x firstEntry and 8x nextEntry
$ldap->expects($this->exactly(2))
->method('firstEntry')
//dummy value, usually invalid
->will($this->returnValue(true));
$ldap->expects($this->exactly(8))
->method('nextEntry')
//dummy value, usually invalid
->will($this->returnValue(true));
$ldap->expects($this->exactly(10))
->method('getAttributes')
//dummy value, usually invalid
->will($this->returnValue(array('cn' => array('foo'), 'count' => 1)));
global $uidnumber;
$uidnumber = 1;
$ldap->expects($this->exactly(10))
->method('getDN')
//dummy value, usually invalid
->will($this->returnCallback(function($a, $b) {
global $uidnumber;
return $uidnumber++;
}));
# The following expectations are the real test #
$filters = array('f1', 'f2', '*');
$wizard->cumulativeSearchOnAttribute($filters, 'cn', 5);
unset($uidnumber);
}
public function testCumulativeSearchOnAttributeUnlimited() {
list($wizard, $configuration, $ldap) = $this->getWizardAndMocks();
$configuration->expects($this->any())
->method('__get')
->will($this->returnCallback(function($name) {
if($name === 'ldapBase') {
return array('base');
}
return null;
}));
$this->prepareLdapWrapperForConnections($ldap);
$ldap->expects($this->any())
->method('isResource')
->will($this->returnCallback(function($r) {
if($r === true) {
return true;
}
if($r % 24 === 0) {
global $uidnumber;
$uidnumber++;
return false;
}
return true;
}));
$ldap->expects($this->exactly(2))
->method('search')
//dummy value, usually invalid
->will($this->returnValue(true));
$ldap->expects($this->exactly(2))
->method('countEntries')
//an is_resource check will follow, so we need to return a dummy resource
->will($this->returnValue(23));
//5 DNs per filter means 2x firstEntry and 8x nextEntry
$ldap->expects($this->exactly(2))
->method('firstEntry')
//dummy value, usually invalid
->will($this->returnCallback(function($r) {
global $uidnumber;
return $uidnumber;
}));
$ldap->expects($this->exactly(46))
->method('nextEntry')
//dummy value, usually invalid
->will($this->returnCallback(function($r) {
global $uidnumber;
return $uidnumber;
}));
$ldap->expects($this->exactly(46))
->method('getAttributes')
//dummy value, usually invalid
->will($this->returnValue(array('cn' => array('foo'), 'count' => 1)));
global $uidnumber;
$uidnumber = 1;
$ldap->expects($this->exactly(46))
->method('getDN')
//dummy value, usually invalid
->will($this->returnCallback(function($a, $b) {
global $uidnumber;
return $uidnumber++;
}));
# The following expectations are the real test #
$filters = array('f1', 'f2', '*');
$wizard->cumulativeSearchOnAttribute($filters, 'cn', 0);
unset($uidnumber);
}
}