]> source.dussan.org Git - nextcloud-server.git/commitdiff
Backport of #6522 6699/head
authorArthur Schiwon <blizzz@arthur-schiwon.de>
Fri, 15 Sep 2017 14:01:54 +0000 (16:01 +0200)
committerArthur Schiwon <blizzz@arthur-schiwon.de>
Fri, 29 Sep 2017 12:36:48 +0000 (14:36 +0200)
fix LDAP User deletion (cleanup)

discovered a bug in the integration test which lead to following a
different code path and giving a false-positive  success feedback.

Also listens now to the evendispatcher instead of old hook system

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
fix test

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
18 files changed:
apps/user_ldap/appinfo/app.php
apps/user_ldap/appinfo/register_command.php
apps/user_ldap/lib/Command/Search.php
apps/user_ldap/lib/Helper.php
apps/user_ldap/lib/Jobs/CleanUp.php
apps/user_ldap/lib/Migration/UUIDFixGroup.php
apps/user_ldap/lib/User_LDAP.php
apps/user_ldap/lib/User_Proxy.php
apps/user_ldap/tests/Integration/AbstractIntegrationTest.php
apps/user_ldap/tests/Integration/Lib/IntegrationTestAttributeDetection.php
apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php
apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php
apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php
apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php
apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserCleanUp.php
apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php
apps/user_ldap/tests/User_LDAPTest.php
apps/user_ldap/tests/User_ProxyTest.php

index 70e505c18af80365f36aeebc275dd53d8cf3edd6..61b79fb516d3b486c65477a60b89698b9e20d91e 100644 (file)
@@ -44,9 +44,10 @@ if(count($configPrefixes) > 0) {
                        'name' => $l->t('LDAP user and group backend'),
                ];
        });
+       $userSession = \OC::$server->getUserSession();
 
        $userBackend  = new OCA\User_LDAP\User_Proxy(
-               $configPrefixes, $ldapWrapper, $ocConfig, $notificationManager
+               $configPrefixes, $ldapWrapper, $ocConfig, $notificationManager, $userSession
        );
        $groupBackend  = new OCA\User_LDAP\Group_Proxy($configPrefixes, $ldapWrapper);
        // register user backend
index 3ae8bdbfc131ea8e543d8a6c77833e563f7b1a8f..bd706e61f2275e1640cc9ff7d9f8a98a1811cc7e 100644 (file)
@@ -36,7 +36,8 @@ $uBackend = new User_Proxy(
        $helper->getServerConfigurationPrefixes(true),
        new LDAP(),
        $ocConfig,
-       \OC::$server->getNotificationManager()
+       \OC::$server->getNotificationManager(),
+       \OC::$server->getUserSession()
 );
 $deletedUsersIndex = new DeletedUsersIndex(
        $ocConfig, $dbConnection, $userMapping
index 463ad2eaeb445f063f93fa42c484079a7a7a3e6e..d348d5b31c94c9eb0755a52b5096ecc4e78d2f46 100644 (file)
@@ -120,7 +120,13 @@ class Search extends Command {
                                $limit = null;
                        }
                } else {
-                       $proxy = new User_Proxy($configPrefixes, $ldapWrapper, $this->ocConfig, \OC::$server->getNotificationManager());
+                       $proxy = new User_Proxy(
+                               $configPrefixes,
+                               $ldapWrapper,
+                               $this->ocConfig,
+                               \OC::$server->getNotificationManager(),
+                               \OC::$server->getUserSession()
+                       );
                        $getMethod = 'getDisplayNames';
                        $printID = true;
                }
index 83b2f05f1d25d449083c76aab6afb0f06171ced2..891ab7f0a3ae5b95bee8f107e36160053d38f211 100644 (file)
@@ -294,9 +294,10 @@ class Helper {
                $ldapWrapper = new LDAP();
                $ocConfig = \OC::$server->getConfig();
                $notificationManager = \OC::$server->getNotificationManager();
+               $userSession = \OC::$server->getUserSession();
 
                $userBackend  = new User_Proxy(
-                       $configPrefixes, $ldapWrapper, $ocConfig, $notificationManager
+                       $configPrefixes, $ldapWrapper, $ocConfig, $notificationManager, $userSession
                );
                $uid = $userBackend->loginName2UserName($param['uid'] );
                if($uid !== false) {
index a4dd4ba32ad5ad7f64d5a95a77f235ac77e2fe84..44e8f5469f1601a799af7ec8ebb68717515f508e 100644 (file)
@@ -99,7 +99,8 @@ class CleanUp extends TimedJob {
                                $this->ldapHelper->getServerConfigurationPrefixes(true),
                                new LDAP(),
                                $this->ocConfig,
-                               \OC::$server->getNotificationManager()
+                               \OC::$server->getNotificationManager(),
+                               \OC::$server->getUserSession()
                        );
                }
 
index 6aacb37257edc156673465ebe22c43ec21785592..9ea406efadf98d2686dedf944116b2e4e03d8c73 100644 (file)
@@ -33,6 +33,6 @@ class UUIDFixGroup extends UUIDFix {
        public function __construct(GroupMapping $mapper, LDAP $ldap, IConfig $config, Helper $helper) {
                $this->mapper = $mapper;
                $this->proxy = new User_Proxy($helper->getServerConfigurationPrefixes(true), $ldap, $config, 
-                       \OC::$server->getNotificationManager());
+                       \OC::$server->getNotificationManager(), \OC::$server->getUserSession());
        }
 }
index f677ba77b985de9b2aaca67ece1e412d533dc82c..dcfc5cc13b92990b64fc4ab681ebe4c2b3f80b1b 100644 (file)
@@ -42,6 +42,7 @@ use OCA\User_LDAP\User\OfflineUser;
 use OCA\User_LDAP\User\User;
 use OCP\IConfig;
 use OCP\IUser;
+use OCP\IUserSession;
 use OCP\Notification\IManager as INotificationManager;
 use OCP\Util;
 
@@ -59,24 +60,21 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
         * @param Access $access
         * @param \OCP\IConfig $ocConfig
         * @param \OCP\Notification\IManager $notificationManager
+        * @param IUserSession $userSession
         */
-       public function __construct(Access $access, IConfig $ocConfig, INotificationManager $notificationManager) {
+       public function __construct(Access $access, IConfig $ocConfig, INotificationManager $notificationManager, IUserSession $userSession) {
                parent::__construct($access);
                $this->ocConfig = $ocConfig;
                $this->notificationManager = $notificationManager;
-               $this->registerHooks();
+               $this->registerHooks($userSession);
        }
 
-       protected function registerHooks() {
-               Util::connectHook('OC_User','pre_deleteUser', $this, 'preDeleteUser');
-               Util::connectHook('OC_User','post_deleteUser', $this, 'postDeleteUser');
+       protected function registerHooks(IUserSession $userSession) {
+               $userSession->listen('\OC\User', 'preDelete', [$this, 'preDeleteUser']);
+               $userSession->listen('\OC\User', 'postDelete', [$this, 'postDeleteUser']);
        }
 
-       public function preDeleteUser(array $param) {
-               $user = $param[0];
-               if(!$user instanceof IUser) {
-                       throw new \RuntimeException('IUser expected');
-               }
+       public function preDeleteUser(IUser $user) {
                $this->currentUserInDeletionProcess = $user->getUID();
        }
 
@@ -376,8 +374,6 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
                \OC::$server->getLogger()->info('Cleaning up after user ' . $uid,
                        array('app' => 'user_ldap'));
 
-               //Get Home Directory out of user preferences so we can return it later,
-               //necessary for removing directories as done by OC_User.
                $this->access->getUserMapper()->unmap($uid);
                $this->access->userManager->invalidate($uid);
                return true;
@@ -406,7 +402,9 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
                // early return path if it is a deleted user
                $user = $this->access->userManager->get($uid);
                if($user instanceof OfflineUser) {
-                       if($this->currentUserInDeletionProcess === $user->getUID()) {
+                       if($this->currentUserInDeletionProcess !== null
+                               && $this->currentUserInDeletionProcess === $user->getOCName()
+                       ) {
                                return $user->getHomePath();
                        } else {
                                throw new NoUserException($uid . ' is not a valid user anymore');
index 8e81b10f7b31b7fa2e37cff8e6aa4b2893dedcf2..50bb68edc2d9d10dadc38be9c446395c30775e59 100644 (file)
@@ -31,6 +31,7 @@ namespace OCA\User_LDAP;
 
 use OCA\User_LDAP\User\User;
 use OCP\IConfig;
+use OCP\IUserSession;
 use OCP\Notification\IManager as INotificationManager;
 
 class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, IUserLDAP {
@@ -39,14 +40,19 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface,
 
        /**
         * Constructor
+        *
         * @param array $serverConfigPrefixes array containing the config Prefixes
+        * @param ILDAPWrapper $ldap
+        * @param IConfig $ocConfig
+        * @param INotificationManager $notificationManager
+        * @param IUserSession $userSession
         */
        public function __construct(array $serverConfigPrefixes, ILDAPWrapper $ldap, IConfig $ocConfig,
-               INotificationManager $notificationManager) {
+               INotificationManager $notificationManager, IUserSession $userSession) {
                parent::__construct($ldap);
                foreach($serverConfigPrefixes as $configPrefix) {
                        $this->backends[$configPrefix] =
-                               new User_LDAP($this->getAccess($configPrefix), $ocConfig, $notificationManager);
+                               new User_LDAP($this->getAccess($configPrefix), $ocConfig, $notificationManager, $userSession);
                        if(is_null($this->refBackend)) {
                                $this->refBackend = &$this->backends[$configPrefix];
                        }
index 9891a4f719d1694c3676434af41e3189ba19c2bf..84e1e6b458afd5845b31add3714756a8a3c8952d 100644 (file)
@@ -144,11 +144,17 @@ abstract class AbstractIntegrationTest {
                foreach($methods as $method) {
                        if(strpos($method, 'case') === 0) {
                                print("running $method " . PHP_EOL);
-                               if(!$this->$method()) {
-                                       print(PHP_EOL . '>>> !!! Test ' . $method . ' FAILED !!! <<<' . PHP_EOL . PHP_EOL);
+                               try {
+                                       if(!$this->$method()) {
+                                               print(PHP_EOL . '>>> !!! Test ' . $method . ' FAILED !!! <<<' . PHP_EOL . PHP_EOL);
+                                               exit(1);
+                                       }
+                                       $atLeastOneCaseRan = true;
+                               } catch(\Exception $e) {
+                                       print(PHP_EOL . '>>> !!! Test ' . $method . ' RAISED AN EXCEPTION !!! <<<' . PHP_EOL);
+                                       print($e->getMessage() . PHP_EOL . PHP_EOL);
                                        exit(1);
                                }
-                               $atLeastOneCaseRan = true;
                        }
                }
                if($atLeastOneCaseRan) {
index be35556111fe8e76fb65c6a5d2406e58adadaa80..bd8e4bdd7a242c6807189f97fe2ac66728f0269e 100644 (file)
@@ -49,7 +49,7 @@ class IntegrationTestAttributeDetection extends AbstractIntegrationTest {
                $groupMapper->clear();
                $this->access->setGroupMapper($groupMapper);
 
-               $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager());
+               $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession());
                $userManager = \OC::$server->getUserManager();
                $userManager->clearBackends();
                $userManager->registerBackend($userBackend);
index 5dda79c2ec0c143b843f05186981fdeed60ce649..95bfb99b65bdce41f810c40fcad693cb0ce57cbb 100644 (file)
@@ -47,7 +47,7 @@ class IntegrationTestFetchUsersByLoginName extends AbstractIntegrationTest {
                $this->mapping = new UserMapping(\OC::$server->getDatabaseConnection());
                $this->mapping->clear();
                $this->access->setUserMapper($this->mapping);
-               $this->backend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager());
+               $this->backend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession());
        }
 
        /**
index 35d8524fd8825c376c82441f68986ecd33c5fd78..3c8cf22bb5bf5e1804d20f03132c1e6a8f6506ed 100644 (file)
@@ -47,7 +47,7 @@ class IntegrationTestPaging extends AbstractIntegrationTest {
                require(__DIR__ . '/../setup-scripts/createExplicitUsers.php');
                parent::init();
 
-               $this->backend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager());
+               $this->backend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession());
        }
 
        public function initConnection() {
index 9226c56ee89568c78f4a10d31885203675b7670d..765cee00f912d4f359d08c2895f584dba185b81a 100644 (file)
@@ -51,7 +51,7 @@ class IntegrationTestUserHome extends AbstractIntegrationTest {
                $this->mapping = new UserMapping(\OC::$server->getDatabaseConnection());
                $this->mapping->clear();
                $this->access->setUserMapper($this->mapping);
-               $this->backend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager());
+               $this->backend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession());
        }
 
        /**
index 1710f519158829a9557893ac488988dbe51f532d..8c9e215edaa190643cfbf155fa98a8e9b1043d5c 100644 (file)
@@ -50,7 +50,7 @@ class IntegrationTestUserAvatar extends AbstractIntegrationTest {
                $this->mapping = new UserMapping(\OC::$server->getDatabaseConnection());
                $this->mapping->clear();
                $this->access->setUserMapper($this->mapping);
-               $userBackend  = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager());
+               $userBackend  = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession());
                \OC_User::useBackend($userBackend);
        }
 
index 7d45ee69fbc7babc954c919d3faf029d25c929d7..ce81b9a26d6adec9a37c9add1691782c8619b2c5 100644 (file)
@@ -46,7 +46,7 @@ class IntegrationTestUserCleanUp extends AbstractIntegrationTest {
                $this->mapping->clear();
                $this->access->setUserMapper($this->mapping);
 
-               $userBackend  = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager());
+               $userBackend  = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession());
                \OC_User::useBackend($userBackend);
        }
 
@@ -76,16 +76,18 @@ class IntegrationTestUserCleanUp extends AbstractIntegrationTest {
                $dn = 'uid=alice,ou=Users,' . $this->base;
                $this->prepareUser($dn, $username);
 
-               $user = \OC::$server->getUserManager()->get($username);
-               if($user === null) {
-                       return false;
-               }
-
                $this->deleteUserFromLDAP($dn);
 
                $job = new CleanUp();
                $job->run([]);
 
+               // user instance must not be requested from global user manager, before
+               // it is deleted from the LDAP server. The instance will be returned
+               // from cache and may false-positively confirm the correctness.
+               $user = \OC::$server->getUserManager()->get($username);
+               if($user === null) {
+                       return false;
+               }
                $user->delete();
 
                return null === \OC::$server->getUserManager()->get($username);
index 886b0b46f0e1b1925b5175559139c8e85a41046a..1f5d16567f78ed6e61e4efb3405e1981a0c7adcf 100644 (file)
@@ -43,7 +43,7 @@ class IntegrationTestUserDisplayName extends AbstractIntegrationTest {
                $this->mapping = new UserMapping(\OC::$server->getDatabaseConnection());
                $this->mapping->clear();
                $this->access->setUserMapper($this->mapping);
-               $userBackend  = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager());
+               $userBackend  = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager(), \OC::$server->getUserSession());
                \OC_User::useBackend($userBackend);
        }
 
index 9f1b1d3ffc8ffe2b32e464b171a5ac0af1800f22..969e8c5651a6e126026ddfacbd6430795bca31f8 100644 (file)
@@ -29,6 +29,7 @@
 
 namespace OCA\User_LDAP\Tests;
 
+use OC\User\Session;
 use OCA\User_LDAP\Access;
 use OCA\User_LDAP\Connection;
 use OCA\User_LDAP\FilesystemHelper;
@@ -46,6 +47,7 @@ use OCP\IAvatarManager;
 use OCP\IConfig;
 use OCP\IDBConnection;
 use OCP\Image;
+use OCP\IUser;
 use OCP\IUserManager;
 use Test\TestCase;
 use OCP\Notification\IManager as INotificationManager;
@@ -202,7 +204,7 @@ class User_LDAPTest extends TestCase {
                $access = $this->getAccessMock();
 
                $this->prepareAccessForCheckPassword($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                \OC_User::useBackend($backend);
 
                $result = $backend->checkPassword('roland', 'dt19');
@@ -213,7 +215,7 @@ class User_LDAPTest extends TestCase {
                $access = $this->getAccessMock();
 
                $this->prepareAccessForCheckPassword($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                \OC_User::useBackend($backend);
 
                $result = $backend->checkPassword('roland', 'wrong');
@@ -224,7 +226,7 @@ class User_LDAPTest extends TestCase {
                $access = $this->getAccessMock();
 
                $this->prepareAccessForCheckPassword($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                \OC_User::useBackend($backend);
 
                $result = $backend->checkPassword('mallory', 'evil');
@@ -239,7 +241,7 @@ class User_LDAPTest extends TestCase {
                        ->method('username2dn')
                        ->will($this->returnValue(false));
 
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                \OC_User::useBackend($backend);
 
                $result = $backend->checkPassword('roland', 'dt19');
@@ -249,7 +251,7 @@ class User_LDAPTest extends TestCase {
        public function testCheckPasswordPublicAPI() {
                $access = $this->getAccessMock();
                $this->prepareAccessForCheckPassword($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                \OC_User::useBackend($backend);
 
                $result = \OCP\User::checkPassword('roland', 'dt19');
@@ -259,7 +261,7 @@ class User_LDAPTest extends TestCase {
        public function testCheckPasswordPublicAPIWrongPassword() {
                $access = $this->getAccessMock();
                $this->prepareAccessForCheckPassword($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                \OC_User::useBackend($backend);
 
                $result = \OCP\User::checkPassword('roland', 'wrong');
@@ -269,7 +271,7 @@ class User_LDAPTest extends TestCase {
        public function testCheckPasswordPublicAPIWrongUser() {
                $access = $this->getAccessMock();
                $this->prepareAccessForCheckPassword($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                \OC_User::useBackend($backend);
 
                $result = \OCP\User::checkPassword('mallory', 'evil');
@@ -278,7 +280,7 @@ class User_LDAPTest extends TestCase {
 
        public function testDeleteUserCancel() {
                $access = $this->getAccessMock();
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                $result = $backend->deleteUser('notme');
                $this->assertFalse($result);
        }
@@ -304,9 +306,18 @@ class User_LDAPTest extends TestCase {
                $this->offlineUser->expects($this->once())
                        ->method('getHomePath')
                        ->willReturn($home);
+               $this->offlineUser->expects($this->once())
+                       ->method('getOCName')
+                       ->willReturn($uid);
 
-               $backend = new UserLDAP($access, $this->configMock, $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->configMock, $this->createMock(INotificationManager::class), $this->createMock(Session::class));
+
+               $user = $this->createMock(IUser::class);
+               $user->expects($this->once())
+                       ->method('getUID')
+                       ->willReturn($uid);
 
+               $backend->preDeleteUser($user);
                $result = $backend->deleteUser($uid);
                $this->assertTrue($result);
                $this->assertSame($backend->getHome($uid), $home);
@@ -364,7 +375,7 @@ class User_LDAPTest extends TestCase {
        public function testGetUsersNoParam() {
                $access = $this->getAccessMock();
                $this->prepareAccessForGetUsers($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
 
                $result = $backend->getUsers();
                $this->assertEquals(3, count($result));
@@ -373,7 +384,7 @@ class User_LDAPTest extends TestCase {
        public function testGetUsersLimitOffset() {
                $access = $this->getAccessMock();
                $this->prepareAccessForGetUsers($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
 
                $result = $backend->getUsers('', 1, 2);
                $this->assertEquals(1, count($result));
@@ -382,7 +393,7 @@ class User_LDAPTest extends TestCase {
        public function testGetUsersLimitOffset2() {
                $access = $this->getAccessMock();
                $this->prepareAccessForGetUsers($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
 
                $result = $backend->getUsers('', 2, 1);
                $this->assertEquals(2, count($result));
@@ -391,7 +402,7 @@ class User_LDAPTest extends TestCase {
        public function testGetUsersSearchWithResult() {
                $access = $this->getAccessMock();
                $this->prepareAccessForGetUsers($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
 
                $result = $backend->getUsers('yo');
                $this->assertEquals(2, count($result));
@@ -400,7 +411,7 @@ class User_LDAPTest extends TestCase {
        public function testGetUsersSearchEmptyResult() {
                $access = $this->getAccessMock();
                $this->prepareAccessForGetUsers($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
 
                $result = $backend->getUsers('nix');
                $this->assertEquals(0, count($result));
@@ -409,7 +420,7 @@ class User_LDAPTest extends TestCase {
        public function testGetUsersViaAPINoParam() {
                $access = $this->getAccessMock();
                $this->prepareAccessForGetUsers($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                \OC_User::useBackend($backend);
 
                $result = \OCP\User::getUsers();
@@ -419,7 +430,7 @@ class User_LDAPTest extends TestCase {
        public function testGetUsersViaAPILimitOffset() {
                $access = $this->getAccessMock();
                $this->prepareAccessForGetUsers($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                \OC_User::useBackend($backend);
 
                $result = \OCP\User::getUsers('', 1, 2);
@@ -429,7 +440,7 @@ class User_LDAPTest extends TestCase {
        public function testGetUsersViaAPILimitOffset2() {
                $access = $this->getAccessMock();
                $this->prepareAccessForGetUsers($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                \OC_User::useBackend($backend);
 
                $result = \OCP\User::getUsers('', 2, 1);
@@ -439,7 +450,7 @@ class User_LDAPTest extends TestCase {
        public function testGetUsersViaAPISearchWithResult() {
                $access = $this->getAccessMock();
                $this->prepareAccessForGetUsers($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                \OC_User::useBackend($backend);
 
                $result = \OCP\User::getUsers('yo');
@@ -449,7 +460,7 @@ class User_LDAPTest extends TestCase {
        public function testGetUsersViaAPISearchEmptyResult() {
                $access = $this->getAccessMock();
                $this->prepareAccessForGetUsers($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                \OC_User::useBackend($backend);
 
                $result = \OCP\User::getUsers('nix');
@@ -458,7 +469,7 @@ class User_LDAPTest extends TestCase {
 
        public function testUserExists() {
                $access = $this->getAccessMock();
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                $this->prepareMockForUserExists($access);
 
                $access->expects($this->any())
@@ -480,7 +491,7 @@ class User_LDAPTest extends TestCase {
         */
        public function testUserExistsForDeleted() {
                $access = $this->getAccessMock();
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                $this->prepareMockForUserExists($access);
 
                $access->expects($this->any())
@@ -498,7 +509,7 @@ class User_LDAPTest extends TestCase {
 
        public function testUserExistsForNeverExisting() {
                $access = $this->getAccessMock();
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                $this->prepareMockForUserExists($access);
 
                $access->expects($this->any())
@@ -517,7 +528,7 @@ class User_LDAPTest extends TestCase {
 
        public function testUserExistsPublicAPI() {
                $access = $this->getAccessMock();
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                $this->prepareMockForUserExists($access);
                \OC_User::useBackend($backend);
 
@@ -540,7 +551,7 @@ class User_LDAPTest extends TestCase {
         */
        public function testUserExistsPublicAPIForDeleted() {
                $access = $this->getAccessMock();
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                $this->prepareMockForUserExists($access);
                \OC_User::useBackend($backend);
 
@@ -559,7 +570,7 @@ class User_LDAPTest extends TestCase {
 
        public function testUserExistsPublicAPIForNeverExisting() {
                $access = $this->getAccessMock();
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                $this->prepareMockForUserExists($access);
                \OC_User::useBackend($backend);
 
@@ -579,7 +590,7 @@ class User_LDAPTest extends TestCase {
 
        public function testDeleteUserExisting() {
                $access = $this->getAccessMock();
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
 
                //we do not support deleting existing users at all
                $result = $backend->deleteUser('gunslinger');
@@ -590,7 +601,7 @@ class User_LDAPTest extends TestCase {
                $access = $this->getAccessMock();
                $config = $this->createMock(IConfig::class);
                $noti = $this->createMock(INotificationManager::class);
-               $backend = new UserLDAP($access, $config, $noti);
+               $backend = new UserLDAP($access, $config, $noti, $this->createMock(Session::class));
                $this->prepareMockForUserExists($access);
 
                $access->connection->expects($this->any())
@@ -626,7 +637,7 @@ class User_LDAPTest extends TestCase {
                $access = $this->getAccessMock();
                $config = $this->createMock(IConfig::class);
                $noti = $this->createMock(INotificationManager::class);
-               $backend = new UserLDAP($access, $config, $noti);
+               $backend = new UserLDAP($access, $config, $noti, $this->createMock(Session::class));
                $this->prepareMockForUserExists($access);
 
                $dataDir = \OC::$server->getConfig()->getSystemValue(
@@ -669,7 +680,7 @@ class User_LDAPTest extends TestCase {
         */
        public function testGetHomeNoPath() {
                $access = $this->getAccessMock();
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                $this->prepareMockForUserExists($access);
 
                $access->connection->expects($this->any())
@@ -702,7 +713,7 @@ class User_LDAPTest extends TestCase {
                $uid = 'newyorker';
 
                $access = $this->getAccessMock();
-               $backend = new UserLDAP($access, $this->configMock, $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->configMock, $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                $this->prepareMockForUserExists($access);
 
                $access->connection->expects($this->any())
@@ -730,9 +741,6 @@ class User_LDAPTest extends TestCase {
 
                $this->offlineUser->expects($this->never())
                        ->method('getHomePath');
-               $this->offlineUser->expects($this->once())
-                       ->method('getUID')
-                       ->willReturn($uid);
 
                $backend->getHome($uid);
        }
@@ -775,7 +783,7 @@ class User_LDAPTest extends TestCase {
        public function testGetDisplayName() {
                $access = $this->getAccessMock();
                $this->prepareAccessForGetDisplayName($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                $this->prepareMockForUserExists($access);
 
                $access->connection->expects($this->any())
@@ -816,7 +824,7 @@ class User_LDAPTest extends TestCase {
                                }
                        }));
                $this->prepareAccessForGetDisplayName($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                $this->prepareMockForUserExists($access);
 
                $access->connection->expects($this->any())
@@ -846,7 +854,7 @@ class User_LDAPTest extends TestCase {
                           ->method('countUsers')
                           ->will($this->returnValue(5));
 
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
 
                $result = $backend->countUsers();
                $this->assertEquals(5, $result);
@@ -859,7 +867,7 @@ class User_LDAPTest extends TestCase {
                           ->method('countUsers')
                           ->will($this->returnValue(false));
 
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
 
                $result = $backend->countUsers();
                $this->assertFalse($result);
@@ -892,7 +900,7 @@ class User_LDAPTest extends TestCase {
                        ->method('writeToCache')
                        ->with($this->equalTo('loginName2UserName-'.$loginName), $this->equalTo($username));
 
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                $name = $backend->loginName2UserName($loginName);
                $this->assertSame($username, $name);
 
@@ -921,7 +929,7 @@ class User_LDAPTest extends TestCase {
                        ->method('writeToCache')
                        ->with($this->equalTo('loginName2UserName-'.$loginName), false);
 
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                $name = $backend->loginName2UserName($loginName);
                $this->assertSame(false, $name);
 
@@ -968,7 +976,7 @@ class User_LDAPTest extends TestCase {
                        ->method('getUserValue')
                        ->willReturn(1);
 
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                $name = $backend->loginName2UserName($loginName);
                $this->assertSame(false, $name);
 
@@ -1049,7 +1057,7 @@ class User_LDAPTest extends TestCase {
                $access = $this->getAccessMock();
 
                $this->prepareAccessForSetPassword($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                \OC_User::useBackend($backend);
 
                $this->assertTrue(\OC_User::setPassword('roland', 'dt'));
@@ -1059,7 +1067,7 @@ class User_LDAPTest extends TestCase {
                $access = $this->getAccessMock();
 
                $this->prepareAccessForSetPassword($access);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                \OC_User::useBackend($backend);
 
                $this->assertTrue(\OC_User::setPassword('roland', 'dt12234$'));
@@ -1069,7 +1077,7 @@ class User_LDAPTest extends TestCase {
                $access = $this->getAccessMock();
 
                $this->prepareAccessForSetPassword($access, false);
-               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class));
+               $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class), $this->createMock(Session::class));
                \OC_User::useBackend($backend);
 
                $this->assertFalse(\OC_User::setPassword('roland', 'dt12234$'));
@@ -1089,10 +1097,12 @@ class User_LDAPTest extends TestCase {
                        ->willReturn(null);
                $config = $this->createMock(IConfig::class);
                $noti = $this->createMock(INotificationManager::class);
+               $userSession = $this->createMock(Session::class);
                $ldap = new User_LDAP(
                        $access,
                        $config,
-                       $noti
+                       $noti,
+                       $userSession
                );
                $ldap->setPassword('NotExistingUser', 'Password');
        }
@@ -1112,10 +1122,12 @@ class User_LDAPTest extends TestCase {
                        ->willReturn($user);
                $config = $this->createMock(IConfig::class);
                $noti = $this->createMock(INotificationManager::class);
+               $userSession = $this->createMock(Session::class);
                $ldap = new User_LDAP(
                        $access,
                        $config,
-                       $noti
+                       $noti,
+                       $userSession
                );
                $this->assertFalse($ldap->setPassword('NotExistingUser', 'Password'));
        }
index df021a6de3d5df9207c988030450c42aa1b1e616..68b1e4428ca64fbc2de25b8f80741d406402a8cb 100644 (file)
@@ -24,6 +24,7 @@ namespace OCA\User_LDAP\Tests;
 use OCA\User_LDAP\ILDAPWrapper;
 use OCA\User_LDAP\User_Proxy;
 use OCP\IConfig;
+use OCP\IUserSession;
 use OCP\Notification\IManager as INotificationManager;
 use Test\TestCase;
 
@@ -32,8 +33,10 @@ class User_ProxyTest extends TestCase  {
        private $ldapWrapper;
        /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
        private $config;
-       /** @var IManager|\PHPUnit_Framework_MockObject_MockObject */
+       /** @var INotificationManager|\PHPUnit_Framework_MockObject_MockObject */
        private $notificationManager;
+       /** @var IUserSession|\PHPUnit_Framework_MockObject_MockObject */
+       private $userSession;
        /** @var User_Proxy|\PHPUnit_Framework_MockObject_MockObject */
        private $proxy;
 
@@ -43,12 +46,14 @@ class User_ProxyTest extends TestCase  {
                $this->ldapWrapper = $this->createMock(ILDAPWrapper::class);
                $this->config = $this->createMock(IConfig::class);
                $this->notificationManager = $this->createMock(INotificationManager::class);
+               $this->userSession = $this->createMock(IUserSession::class);
                $this->proxy = $this->getMockBuilder(User_Proxy::class)
                        ->setConstructorArgs([
                                [],
                                $this->ldapWrapper,
                                $this->config,
                                $this->notificationManager,
+                               $this->userSession,
                        ])
                        ->setMethods(['handleRequest'])
                        ->getMock();