Merge pull request #17723 from owncloud/fix-17631
fix runtime caching in ldap's user manager, fixes #17631
This commit is contained in:
commit
f573659b3a
|
@ -110,8 +110,8 @@ class Manager {
|
||||||
$user = new User($uid, $dn, $this->access, $this->ocConfig,
|
$user = new User($uid, $dn, $this->access, $this->ocConfig,
|
||||||
$this->ocFilesystem, clone $this->image, $this->ocLog,
|
$this->ocFilesystem, clone $this->image, $this->ocLog,
|
||||||
$this->avatarManager);
|
$this->avatarManager);
|
||||||
$users['byDN'][$dn] = $user;
|
$this->users['byDN'][$dn] = $user;
|
||||||
$users['byUid'][$uid] = $user;
|
$this->users['byUid'][$uid] = $user;
|
||||||
return $user;
|
return $user;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,174 +28,182 @@ use OCA\user_ldap\lib\user\Manager;
|
||||||
|
|
||||||
class Test_User_Manager extends \Test\TestCase {
|
class Test_User_Manager extends \Test\TestCase {
|
||||||
|
|
||||||
private function getTestInstances() {
|
private function getTestInstances() {
|
||||||
$access = $this->getMock('\OCA\user_ldap\lib\user\IUserTools');
|
$access = $this->getMock('\OCA\user_ldap\lib\user\IUserTools');
|
||||||
$config = $this->getMock('\OCP\IConfig');
|
$config = $this->getMock('\OCP\IConfig');
|
||||||
$filesys = $this->getMock('\OCA\user_ldap\lib\FilesystemHelper');
|
$filesys = $this->getMock('\OCA\user_ldap\lib\FilesystemHelper');
|
||||||
$log = $this->getMock('\OCA\user_ldap\lib\LogWrapper');
|
$log = $this->getMock('\OCA\user_ldap\lib\LogWrapper');
|
||||||
$avaMgr = $this->getMock('\OCP\IAvatarManager');
|
$avaMgr = $this->getMock('\OCP\IAvatarManager');
|
||||||
$image = $this->getMock('\OCP\Image');
|
$image = $this->getMock('\OCP\Image');
|
||||||
$dbc = $this->getMock('\OCP\IDBConnection');
|
$dbc = $this->getMock('\OCP\IDBConnection');
|
||||||
|
|
||||||
return array($access, $config, $filesys, $image, $log, $avaMgr, $dbc);
|
return array($access, $config, $filesys, $image, $log, $avaMgr, $dbc);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetByDNExisting() {
|
public function testGetByDNExisting() {
|
||||||
list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
|
list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
|
||||||
$this->getTestInstances();
|
$this->getTestInstances();
|
||||||
|
|
||||||
$inputDN = 'cn=foo,dc=foobar,dc=bar';
|
$inputDN = 'cn=foo,dc=foobar,dc=bar';
|
||||||
$uid = '563418fc-423b-1033-8d1c-ad5f418ee02e';
|
$uid = '563418fc-423b-1033-8d1c-ad5f418ee02e';
|
||||||
|
|
||||||
$access->expects($this->once())
|
$access->expects($this->once())
|
||||||
->method('stringResemblesDN')
|
->method('stringResemblesDN')
|
||||||
->with($this->equalTo($inputDN))
|
->with($this->equalTo($inputDN))
|
||||||
->will($this->returnValue(true));
|
->will($this->returnValue(true));
|
||||||
|
|
||||||
$access->expects($this->once())
|
|
||||||
->method('dn2username')
|
|
||||||
->with($this->equalTo($inputDN))
|
|
||||||
->will($this->returnValue($uid));
|
|
||||||
|
|
||||||
$access->expects($this->never())
|
|
||||||
->method('username2dn');
|
|
||||||
|
|
||||||
$manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
|
|
||||||
$manager->setLdapAccess($access);
|
|
||||||
$user = $manager->get($inputDN);
|
|
||||||
|
|
||||||
$this->assertInstanceOf('\OCA\user_ldap\lib\user\User', $user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetByEDirectoryDN() {
|
|
||||||
list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
|
|
||||||
$this->getTestInstances();
|
|
||||||
|
|
||||||
$inputDN = 'uid=foo,o=foobar,c=bar';
|
|
||||||
$uid = '563418fc-423b-1033-8d1c-ad5f418ee02e';
|
|
||||||
|
|
||||||
$access->expects($this->once())
|
$access->expects($this->once())
|
||||||
->method('stringResemblesDN')
|
->method('dn2username')
|
||||||
->with($this->equalTo($inputDN))
|
->with($this->equalTo($inputDN))
|
||||||
->will($this->returnValue(true));
|
->will($this->returnValue($uid));
|
||||||
|
|
||||||
$access->expects($this->once())
|
$access->expects($this->never())
|
||||||
->method('dn2username')
|
->method('username2dn');
|
||||||
->with($this->equalTo($inputDN))
|
|
||||||
->will($this->returnValue($uid));
|
|
||||||
|
|
||||||
$access->expects($this->never())
|
$manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
|
||||||
->method('username2dn');
|
$manager->setLdapAccess($access);
|
||||||
|
$user = $manager->get($inputDN);
|
||||||
|
|
||||||
$manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
|
// Now we fetch the user again. If this leads to a failing test,
|
||||||
$manager->setLdapAccess($access);
|
// runtime caching the manager is broken.
|
||||||
$user = $manager->get($inputDN);
|
$user = $manager->get($inputDN);
|
||||||
|
|
||||||
$this->assertInstanceOf('\OCA\user_ldap\lib\user\User', $user);
|
$this->assertInstanceOf('\OCA\user_ldap\lib\user\User', $user);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetByExoticDN() {
|
public function testGetByEDirectoryDN() {
|
||||||
list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
|
list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
|
||||||
$this->getTestInstances();
|
$this->getTestInstances();
|
||||||
|
|
||||||
$inputDN = 'ab=cde,f=ghei,mno=pq';
|
$inputDN = 'uid=foo,o=foobar,c=bar';
|
||||||
$uid = '563418fc-423b-1033-8d1c-ad5f418ee02e';
|
$uid = '563418fc-423b-1033-8d1c-ad5f418ee02e';
|
||||||
|
|
||||||
$access->expects($this->once())
|
$access->expects($this->once())
|
||||||
->method('stringResemblesDN')
|
->method('stringResemblesDN')
|
||||||
->with($this->equalTo($inputDN))
|
->with($this->equalTo($inputDN))
|
||||||
->will($this->returnValue(true));
|
->will($this->returnValue(true));
|
||||||
|
|
||||||
$access->expects($this->once())
|
|
||||||
->method('dn2username')
|
|
||||||
->with($this->equalTo($inputDN))
|
|
||||||
->will($this->returnValue($uid));
|
|
||||||
|
|
||||||
$access->expects($this->never())
|
|
||||||
->method('username2dn');
|
|
||||||
|
|
||||||
$manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
|
|
||||||
$manager->setLdapAccess($access);
|
|
||||||
$user = $manager->get($inputDN);
|
|
||||||
|
|
||||||
$this->assertInstanceOf('\OCA\user_ldap\lib\user\User', $user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetByDNNotExisting() {
|
|
||||||
list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
|
|
||||||
$this->getTestInstances();
|
|
||||||
|
|
||||||
$inputDN = 'cn=gone,dc=foobar,dc=bar';
|
|
||||||
|
|
||||||
$access->expects($this->once())
|
$access->expects($this->once())
|
||||||
->method('stringResemblesDN')
|
->method('dn2username')
|
||||||
->with($this->equalTo($inputDN))
|
->with($this->equalTo($inputDN))
|
||||||
->will($this->returnValue(true));
|
->will($this->returnValue($uid));
|
||||||
|
|
||||||
$access->expects($this->once())
|
$access->expects($this->never())
|
||||||
->method('dn2username')
|
->method('username2dn');
|
||||||
->with($this->equalTo($inputDN))
|
|
||||||
->will($this->returnValue(false));
|
|
||||||
|
|
||||||
$access->expects($this->once())
|
$manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
|
||||||
->method('username2dn')
|
$manager->setLdapAccess($access);
|
||||||
->with($this->equalTo($inputDN))
|
$user = $manager->get($inputDN);
|
||||||
->will($this->returnValue(false));
|
|
||||||
|
|
||||||
$manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
|
$this->assertInstanceOf('\OCA\user_ldap\lib\user\User', $user);
|
||||||
$manager->setLdapAccess($access);
|
}
|
||||||
$user = $manager->get($inputDN);
|
|
||||||
|
|
||||||
$this->assertNull($user);
|
public function testGetByExoticDN() {
|
||||||
}
|
list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
|
||||||
|
$this->getTestInstances();
|
||||||
|
|
||||||
public function testGetByUidExisting() {
|
$inputDN = 'ab=cde,f=ghei,mno=pq';
|
||||||
list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
|
$uid = '563418fc-423b-1033-8d1c-ad5f418ee02e';
|
||||||
$this->getTestInstances();
|
|
||||||
|
|
||||||
$dn = 'cn=foo,dc=foobar,dc=bar';
|
$access->expects($this->once())
|
||||||
$uid = '563418fc-423b-1033-8d1c-ad5f418ee02e';
|
->method('stringResemblesDN')
|
||||||
|
->with($this->equalTo($inputDN))
|
||||||
|
->will($this->returnValue(true));
|
||||||
|
|
||||||
$access->expects($this->never())
|
$access->expects($this->once())
|
||||||
->method('dn2username');
|
->method('dn2username')
|
||||||
|
->with($this->equalTo($inputDN))
|
||||||
|
->will($this->returnValue($uid));
|
||||||
|
|
||||||
$access->expects($this->once())
|
$access->expects($this->never())
|
||||||
->method('username2dn')
|
->method('username2dn');
|
||||||
->with($this->equalTo($uid))
|
|
||||||
->will($this->returnValue($dn));
|
|
||||||
|
|
||||||
$access->expects($this->once())
|
$manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
|
||||||
->method('stringResemblesDN')
|
$manager->setLdapAccess($access);
|
||||||
->with($this->equalTo($uid))
|
$user = $manager->get($inputDN);
|
||||||
->will($this->returnValue(false));
|
|
||||||
|
|
||||||
$manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
|
$this->assertInstanceOf('\OCA\user_ldap\lib\user\User', $user);
|
||||||
$manager->setLdapAccess($access);
|
}
|
||||||
$user = $manager->get($uid);
|
|
||||||
|
|
||||||
$this->assertInstanceOf('\OCA\user_ldap\lib\user\User', $user);
|
public function testGetByDNNotExisting() {
|
||||||
}
|
list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
|
||||||
|
$this->getTestInstances();
|
||||||
|
|
||||||
public function testGetByUidNotExisting() {
|
$inputDN = 'cn=gone,dc=foobar,dc=bar';
|
||||||
list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
|
|
||||||
$this->getTestInstances();
|
|
||||||
|
|
||||||
$dn = 'cn=foo,dc=foobar,dc=bar';
|
$access->expects($this->once())
|
||||||
$uid = 'gone';
|
->method('stringResemblesDN')
|
||||||
|
->with($this->equalTo($inputDN))
|
||||||
|
->will($this->returnValue(true));
|
||||||
|
|
||||||
$access->expects($this->never())
|
$access->expects($this->once())
|
||||||
->method('dn2username');
|
->method('dn2username')
|
||||||
|
->with($this->equalTo($inputDN))
|
||||||
|
->will($this->returnValue(false));
|
||||||
|
|
||||||
$access->expects($this->exactly(1))
|
$access->expects($this->once())
|
||||||
->method('username2dn')
|
->method('username2dn')
|
||||||
->with($this->equalTo($uid))
|
->with($this->equalTo($inputDN))
|
||||||
->will($this->returnValue(false));
|
->will($this->returnValue(false));
|
||||||
|
|
||||||
$manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
|
$manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
|
||||||
$manager->setLdapAccess($access);
|
$manager->setLdapAccess($access);
|
||||||
$user = $manager->get($uid);
|
$user = $manager->get($inputDN);
|
||||||
|
|
||||||
$this->assertNull($user);
|
$this->assertNull($user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testGetByUidExisting() {
|
||||||
|
list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
|
||||||
|
$this->getTestInstances();
|
||||||
|
|
||||||
|
$dn = 'cn=foo,dc=foobar,dc=bar';
|
||||||
|
$uid = '563418fc-423b-1033-8d1c-ad5f418ee02e';
|
||||||
|
|
||||||
|
$access->expects($this->never())
|
||||||
|
->method('dn2username');
|
||||||
|
|
||||||
|
$access->expects($this->once())
|
||||||
|
->method('username2dn')
|
||||||
|
->with($this->equalTo($uid))
|
||||||
|
->will($this->returnValue($dn));
|
||||||
|
|
||||||
|
$access->expects($this->once())
|
||||||
|
->method('stringResemblesDN')
|
||||||
|
->with($this->equalTo($uid))
|
||||||
|
->will($this->returnValue(false));
|
||||||
|
|
||||||
|
$manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
|
||||||
|
$manager->setLdapAccess($access);
|
||||||
|
$user = $manager->get($uid);
|
||||||
|
|
||||||
|
// Now we fetch the user again. If this leads to a failing test,
|
||||||
|
// runtime caching the manager is broken.
|
||||||
|
$user = $manager->get($uid);
|
||||||
|
|
||||||
|
$this->assertInstanceOf('\OCA\user_ldap\lib\user\User', $user);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetByUidNotExisting() {
|
||||||
|
list($access, $config, $filesys, $image, $log, $avaMgr, $dbc) =
|
||||||
|
$this->getTestInstances();
|
||||||
|
|
||||||
|
$dn = 'cn=foo,dc=foobar,dc=bar';
|
||||||
|
$uid = 'gone';
|
||||||
|
|
||||||
|
$access->expects($this->never())
|
||||||
|
->method('dn2username');
|
||||||
|
|
||||||
|
$access->expects($this->exactly(1))
|
||||||
|
->method('username2dn')
|
||||||
|
->with($this->equalTo($uid))
|
||||||
|
->will($this->returnValue(false));
|
||||||
|
|
||||||
|
$manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc);
|
||||||
|
$manager->setLdapAccess($access);
|
||||||
|
$user = $manager->get($uid);
|
||||||
|
|
||||||
|
$this->assertNull($user);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue