From 516f75fc6bc13fdedabc1a597e3ad505b08f2012 Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Fri, 16 May 2014 18:03:40 +0200 Subject: [PATCH] add unit test to make sure the infinite loop never comes back --- apps/user_ldap/tests/wizard.php | 80 ++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/apps/user_ldap/tests/wizard.php b/apps/user_ldap/tests/wizard.php index 2b5cabc705d..f5a9a1dfe8e 100644 --- a/apps/user_ldap/tests/wizard.php +++ b/apps/user_ldap/tests/wizard.php @@ -207,4 +207,82 @@ class Test_Wizard extends \PHPUnit_Framework_TestCase { unset($uidnumber); } -} \ No newline at end of file + public function testCumulativeSearchOnAttributeSkipReadDN() { + // tests that there is no infinite loop, when skipping already processed + // DNs (they can be returned multiple times for multiple filters ) + 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($res) { + return (bool)$res; + })); + + $ldap->expects($this->any()) + ->method('search') + //dummy value, usually invalid + ->will($this->returnValue(true)); + + $ldap->expects($this->any()) + ->method('countEntries') + //an is_resource check will follow, so we need to return a dummy resource + ->will($this->returnValue(7)); + + //5 DNs per filter means 2x firstEntry and 8x nextEntry + $ldap->expects($this->any()) + ->method('firstEntry') + //dummy value, usually invalid + ->will($this->returnValue(1)); + + global $mark; + $mark = false; + // entries return order: 1, 2, 3, 4, 4, 5, 6 + $ldap->expects($this->any()) + ->method('nextEntry') + //dummy value, usually invalid + ->will($this->returnCallback(function($a, $prev){ + $current = $prev + 1; + if($current === 7) { + return false; + } + global $mark; + if($prev === 4 && !$mark) { + $mark = true; + return 4; + } + return $current; + })); + + $ldap->expects($this->any()) + ->method('getAttributes') + //dummy value, usually invalid + ->will($this->returnCallback(function($a, $entry) { + return array('cn' => array($entry), 'count' => 1); + })); + + $ldap->expects($this->any()) + ->method('getDN') + //dummy value, usually invalid + ->will($this->returnCallback(function($a, $b) { + return $b; + })); + + # The following expectations are the real test # + $filters = array('f1', 'f2', '*'); + $resultArray = $wizard->cumulativeSearchOnAttribute($filters, 'cn', true, 0); + $this->assertSame(6, count($resultArray)); + unset($mark); + } + +} -- 2.39.5