. * */ 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); } }