]> source.dussan.org Git - nextcloud-server.git/commitdiff
add unit test to make sure the infinite loop never comes back
authorArthur Schiwon <blizzz@owncloud.com>
Fri, 16 May 2014 16:03:40 +0000 (18:03 +0200)
committerArthur Schiwon <blizzz@owncloud.com>
Fri, 16 May 2014 16:03:40 +0000 (18:03 +0200)
apps/user_ldap/tests/wizard.php

index 2b5cabc705d2a18b252c9b8ae930e9acd005e32e..f5a9a1dfe8ecfd3667b84042fd42c30b0157d0c3 100644 (file)
@@ -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);
+       }
+
+}