Exemplo n.º 1
0
    def test_remote_move_to_non_sync_root(self):
        sb, ctl = self.sb_1, self.controller_1
        session = ctl.get_session()

        # Grant ReadWrite permission on Workspaces for test user
        workspaces_path = u'/default-domain/workspaces'
        op_input = "doc:" + workspaces_path
        self.root_remote_client.execute("Document.SetACE",
                                        op_input=op_input,
                                        user="******",
                                        permission="ReadWrite",
                                        grant="true")

        workspaces_info = self.root_remote_client.fetch(workspaces_path)
        workspaces = workspaces_info[u'uid']

        # Get remote client with Workspaces as base folder and local client
        remote_client = RemoteDocumentClient(
            self.nuxeo_url,
            self.user_1,
            u'nxdrive-test-device-1',
            self.version,
            password=self.password_1,
            base_folder=workspaces,
            upload_tmp_dir=self.upload_tmp_dir)
        local_client = self.local_client_1

        # Create a non synchronized folder
        remote_client.make_folder(u'/', u'Non synchronized folder')

        # Move Original Folder 1 to Non synchronized folder
        remote_client.move(u'/nuxeo-drive-test-workspace/Original Folder 1',
                           u'/Non synchronized folder')
        self.assertFalse(
            remote_client.exists(
                u'/nuxeo-drive-test-workspace/Original Folder 1'))
        self.assertTrue(
            remote_client.exists(
                u'/Non synchronized folder/Original Folder 1'))

        # Synchronize: the folder move is detected as a deletion
        self.wait_audit_change_finder_if_needed()
        self.wait()
        self.assertEquals(ctl.synchronizer.update_synchronize_server(sb), 1)

        # Check local folder
        self.assertFalse(local_client.exists(u'/Original Folder 1'))
        # Check folder state
        folder_1_state = session.query(LastKnownState).filter_by(
            remote_name=u'Original Folder 1').all()
        self.assertEquals(len(folder_1_state), 0)

        # The more things change, the more they remain the same.
        self.wait_audit_change_finder_if_needed()
        self.wait()
        self.assertEquals(ctl.synchronizer.update_synchronize_server(sb), 0)
    def test_remote_move_to_non_sync_root(self):
        sb, ctl = self.sb_1, self.controller_1
        session = ctl.get_session()

        # Grant ReadWrite permission on Workspaces for test user
        workspaces_path = u'/default-domain/workspaces'
        op_input = "doc:" + workspaces_path
        self.root_remote_client.execute("Document.SetACE",
            op_input=op_input,
            user="******",
            permission="ReadWrite",
            grant="true")

        workspaces_info = self.root_remote_client.fetch(workspaces_path)
        workspaces = workspaces_info[u'uid']

        # Get remote client with Workspaces as base folder and local client
        remote_client = RemoteDocumentClient(
            self.nuxeo_url, self.user_1, u'nxdrive-test-device-1',
            self.version,
            password=self.password_1, base_folder=workspaces,
            upload_tmp_dir=self.upload_tmp_dir)
        local_client = self.local_client_1

        # Create a non synchronized folder
        remote_client.make_folder(u'/', u'Non synchronized folder')

        # Move Original Folder 1 to Non synchronized folder
        remote_client.move(u'/nuxeo-drive-test-workspace/Original Folder 1',
                           u'/Non synchronized folder')
        self.assertFalse(remote_client.exists(
                            u'/nuxeo-drive-test-workspace/Original Folder 1'))
        self.assertTrue(remote_client.exists(
                            u'/Non synchronized folder/Original Folder 1'))

        # Synchronize: the folder move is detected as a deletion
        self.wait_audit_change_finder_if_needed()
        self.wait()
        self.assertEquals(ctl.synchronizer.update_synchronize_server(sb), 1)

        # Check local folder
        self.assertFalse(local_client.exists(u'/Original Folder 1'))
        # Check folder state
        folder_1_state = session.query(LastKnownState).filter_by(
            remote_name=u'Original Folder 1').all()
        self.assertEquals(len(folder_1_state), 0)

        # The more things change, the more they remain the same.
        self.wait_audit_change_finder_if_needed()
        self.wait()
        self.assertEquals(ctl.synchronizer.update_synchronize_server(sb), 0)
    def test_sync_delete_root(self):
        user_workspaces_path = '/default-domain/UserWorkspaces/'
        user_workspace_title = 'nuxeoDriveTestUser-user-1'
        user_workspace_path = user_workspaces_path + user_workspace_title
        try:
            # Get remote and local clients
            admin_remote_client = self.root_remote_client
            user_remote_client = RemoteDocumentClient(
                self.nuxeo_url, self.user_1, u'nxdrive-test-device-1',
                self.version, password=self.password_1,
                upload_tmp_dir=self.upload_tmp_dir)
            local_client = LocalClient(self.local_nxdrive_folder_1)

            # Make sure user workspace is created
            user_remote_client.make_file_in_user_workspace('File in user workspace', filename='USFile.txt')

            # Create test folder in user workspace as test user
            user_remote_client.make_folder(user_workspace_path, 'test_folder')
            test_folder_path = user_workspace_path + '/test_folder'
            # Create a document in the test folder
            user_remote_client.make_file(test_folder_path, 'test_file.txt', "Some content.")

            # Register test folder as a sync root
            user_remote_client.register_as_root(test_folder_path)

            # Start engine
            self.engine_1.start()

            # Wait for synchronization
            self.wait_sync(wait_for_async=True)

            # Check locally synchronized content
            self.assertTrue(local_client.exists('/My Docs/test_folder'))
            self.assertTrue(local_client.exists('/My Docs/test_folder/test_file.txt'))

            # Delete test folder
            user_remote_client.delete(test_folder_path)

            # Wait for synchronization
            self.wait_sync(wait_for_async=True)

            # Check locally synchronized content
            self.assertFalse(local_client.exists('/My Docs/test_folder'))
            self.assertEquals(len(local_client.get_children_info('/My Docs')), 0)
        finally:
            # Cleanup user workspace
            if admin_remote_client.exists(user_workspace_path):
                admin_remote_client.delete(user_workspace_path,
                                           use_trash=False)
Exemplo n.º 4
0
    def test_register_sync_root_parent(self):
        remote = RemoteDocumentClient(self.nuxeo_url,
                                      self.user_1,
                                      u'nxdrive-test-device-1',
                                      self.version,
                                      password=self.password_1,
                                      upload_tmp_dir=self.upload_tmp_dir)
        local = self.local_root_client_1

        # First unregister test Workspace
        remote.unregister_as_root(self.workspace)

        # Create a child folder and register it as a synchronization root
        child = remote.make_folder(self.workspace, 'child')
        remote.make_file(child, 'aFile.txt', u'My content')
        remote.register_as_root(child)

        # Start engine and wait for synchronization
        self.engine_1.start()
        self.wait_sync(wait_for_async=True)
        self.assertFalse(local.exists('/Nuxeo Drive Test Workspace'))
        self.assertTrue(local.exists('/child'))
        self.assertTrue(local.exists('/child/aFile.txt'))

        # Register parent folder
        remote.register_as_root(self.workspace)

        # Start engine and wait for synchronization
        self.wait_sync(wait_for_async=True)
        self.assertFalse(local.exists('/child'))
        self.assertTrue(local.exists('/Nuxeo Drive Test Workspace'))
        self.assertTrue(local.exists('/Nuxeo Drive Test Workspace/child'))
        self.assertTrue(
            local.exists('/Nuxeo Drive Test Workspace/child/aFile.txt'))
Exemplo n.º 5
0
    def test_register_sync_root_parent(self):
        remote = RemoteDocumentClient(self.nuxeo_url, self.user_1, u'nxdrive-test-device-1', self.version,
                                      password=self.password_1, upload_tmp_dir=self.upload_tmp_dir)
        local = self.local_root_client_1

        # First unregister test Workspace
        remote.unregister_as_root(self.workspace)

        # Create a child folder and register it as a synchronization root
        child = remote.make_folder(self.workspace, 'child')
        remote.make_file(child, 'aFile.txt', u'My content')
        remote.register_as_root(child)

        # Start engine and wait for synchronization
        self.engine_1.start()
        self.wait_sync(wait_for_async=True)
        self.assertFalse(local.exists('/Nuxeo Drive Test Workspace'))
        self.assertTrue(local.exists('/child'))
        self.assertTrue(local.exists('/child/aFile.txt'))

        # Register parent folder
        remote.register_as_root(self.workspace)

        # Start engine and wait for synchronization
        self.wait_sync(wait_for_async=True)
        self.assertFalse(local.exists('/child'))
        self.assertTrue(local.exists('/Nuxeo Drive Test Workspace'))
        self.assertTrue(local.exists('/Nuxeo Drive Test Workspace/child'))
        self.assertTrue(local.exists('/Nuxeo Drive Test Workspace/child/aFile.txt'))
Exemplo n.º 6
0
    def test_make_token(self):
        remote_client = self.remote_document_client_1
        token = remote_client.request_token()
        if token is None:
            raise SkipTest('nuxeo-platform-login-token is not deployed')
        self.assertGreater(len(token), 5)
        self.assertEqual(remote_client.auth[0], 'X-Authentication-Token')
        self.assertEqual(remote_client.auth[1], token)

        remote_client.unregister_as_root(self.workspace)
        self.wait()

        # Requesting token is an idempotent operation
        token2 = remote_client.request_token()
        self.assertEqual(token, token2)

        # It's possible to create a new client using the same token
        remote_client2 = RemoteDocumentClient(
            remote_client.server_url, remote_client.user_id,
            remote_client.device_id, remote_client.client_version,
            token=token, base_folder=self.workspace)

        token3 = remote_client.request_token()
        self.assertEqual(token, token3)

        # Register a root with client 2 and see it with client one
        folder_1 = remote_client2.make_folder('/', 'Folder 1')
        remote_client2.register_as_root(folder_1)

        roots = remote_client.get_roots()
        self.assertEqual(len(roots), 1)
        self.assertEqual(roots[0].name, 'Folder 1')

        # The root can also been seen with a new client connected using
        # password based auth
        remote_client3 = RemoteDocumentClient(
            remote_client.server_url, remote_client.user_id,
            remote_client.device_id, remote_client.client_version,
            password=self.password_1, base_folder=None)
        roots = remote_client3.get_roots()
        self.assertEqual(len(roots), 1)
        self.assertEqual(roots[0].name, 'Folder 1')

        # Another device using the same user credentials will get a different
        # token
        remote_client4 = RemoteDocumentClient(
            remote_client.server_url, remote_client.user_id,
            'other-test-device', remote_client.client_version,
            password=self.password_1, base_folder=None)
        token4 = remote_client4.request_token()
        self.assertNotEquals(token, token4)

        # A client can revoke a token explicitly and thus lose credentials
        remote_client4.revoke_token()
        with self.assertRaises(IOError):
            remote_client4.get_roots()
Exemplo n.º 7
0
    def test_sync_delete_root(self):
        user_workspace_uid = None
        try:
            # Get remote and local clients
            admin_remote_client = self.root_remote_client
            user_remote_client = RemoteDocumentClient(
                self.nuxeo_url,
                self.user_1,
                u'nxdrive-test-device-1',
                self.version,
                password=self.password_1,
                upload_tmp_dir=self.upload_tmp_dir)
            local_client = LocalClient(self.local_nxdrive_folder_1)

            # Make sure user workspace is created and fetch its uid
            user_workspace_uid = user_remote_client.make_file_in_user_workspace(
                'File in user workspace', filename='USFile.txt')['parentRef']

            # Create test folder in user workspace as test user
            test_folder_uid = user_remote_client.make_folder(
                user_workspace_uid, 'test_folder')
            # Create a document in the test folder
            user_remote_client.make_file(test_folder_uid, 'test_file.txt',
                                         "Some content.")

            # Register test folder as a sync root
            user_remote_client.register_as_root(test_folder_uid)

            # Start engine
            self.engine_1.start()

            # Wait for synchronization
            self.wait_sync(wait_for_async=True)

            # Check locally synchronized content
            self.assertTrue(local_client.exists('/My Docs/test_folder'))
            self.assertTrue(
                local_client.exists('/My Docs/test_folder/test_file.txt'))

            # Delete test folder
            user_remote_client.delete(test_folder_uid)

            # Wait for synchronization
            self.wait_sync(wait_for_async=True)

            # Check locally synchronized content
            self.assertFalse(local_client.exists('/My Docs/test_folder'))
            self.assertEquals(len(local_client.get_children_info('/My Docs')),
                              0)
        finally:
            # Cleanup user workspace
            if user_workspace_uid is not None and admin_remote_client.exists(
                    user_workspace_uid):
                admin_remote_client.delete(user_workspace_uid, use_trash=False)
Exemplo n.º 8
0
    def test_remote_move_to_non_sync_root(self):
        # Grant ReadWrite permission on Workspaces for test user
        workspaces_path = u'/default-domain/workspaces'
        op_input = "doc:" + workspaces_path
        self.root_remote_client.execute("Document.SetACE",
                                        op_input=op_input,
                                        user="******",
                                        permission="ReadWrite",
                                        grant="true")

        workspaces_info = self.root_remote_client.fetch(workspaces_path)
        workspaces = workspaces_info[u'uid']

        # Get remote client with Workspaces as base folder and local client
        remote_client = RemoteDocumentClient(
            self.nuxeo_url,
            self.user_1,
            u'nxdrive-test-device-1',
            self.version,
            password=self.password_1,
            base_folder=workspaces,
            upload_tmp_dir=self.upload_tmp_dir)
        local_client = self.local_client_1

        # Create a non synchronized folder
        unsync_folder = remote_client.make_folder(u'/',
                                                  u'Non synchronized folder')

        try:
            # Move Original Folder 1 to Non synchronized folder
            remote_client.move(
                u'/nuxeo-drive-test-workspace/Original Folder 1',
                u'/Non synchronized folder')
            self.assertFalse(
                remote_client.exists(
                    u'/nuxeo-drive-test-workspace/Original Folder 1'))
            self.assertTrue(
                remote_client.exists(
                    u'/Non synchronized folder/Original Folder 1'))

            # Synchronize: the folder move is detected as a deletion
            self.wait_sync(wait_for_async=True)

            # Check local folder
            self.assertFalse(local_client.exists(u'/Original Folder 1'))
            # Check folder state
            folder_1_state = self._get_state(self.folder_1_id)
            self.assertEquals(folder_1_state, None)
        finally:
            # Clean the non synchronized folder
            remote_client.delete(unsync_folder, use_trash=False)
    def test_remote_move_to_non_sync_root(self):
        # Grant ReadWrite permission on Workspaces for test user
        workspaces_path = u'/default-domain/workspaces'
        op_input = "doc:" + workspaces_path
        self.root_remote_client.execute("Document.SetACE",
            op_input=op_input,
            user="******",
            permission="ReadWrite",
            grant="true")

        workspaces_info = self.root_remote_client.fetch(workspaces_path)
        workspaces = workspaces_info[u'uid']

        # Get remote client with Workspaces as base folder and local client
        remote_client = RemoteDocumentClient(
            self.nuxeo_url, self.user_1, u'nxdrive-test-device-1',
            self.version,
            password=self.password_1, base_folder=workspaces,
            upload_tmp_dir=self.upload_tmp_dir)
        local_client = self.local_client_1

        # Create a non synchronized folder
        unsync_folder = remote_client.make_folder(u'/', u'Non synchronized folder')

        try:
            # Move Original Folder 1 to Non synchronized folder
            remote_client.move(u'/nuxeo-drive-test-workspace/Original Folder 1',
                               u'/Non synchronized folder')
            self.assertFalse(remote_client.exists(
                                u'/nuxeo-drive-test-workspace/Original Folder 1'))
            self.assertTrue(remote_client.exists(
                                u'/Non synchronized folder/Original Folder 1'))

            # Synchronize: the folder move is detected as a deletion
            self.wait_sync(wait_for_async=True)

            # Check local folder
            self.assertFalse(local_client.exists(u'/Original Folder 1'))
            # Check folder state
            folder_1_state = self._get_state(self.folder_1_id)
            self.assertEquals(folder_1_state, None)
        finally:
            # Clean the non synchronized folder
            remote_client.delete(unsync_folder, use_trash=False)
    def test_sync_delete_shared_folder(self):
        user_workspace_uid = None
        try:
            # Get remote and local clients
            admin_remote_client = self.root_remote_client
            user1_remote_client = RemoteDocumentClient(
                self.nuxeo_url, self.user_1, u'nxdrive-test-device-1',
                self.version, password=self.password_1,
                upload_tmp_dir=self.upload_tmp_dir)
            user2_remote_client = RemoteDocumentClient(
                self.nuxeo_url, self.user_2, u'nxdrive-test-device-2',
                self.version, password=self.password_2,
                upload_tmp_dir=self.upload_tmp_dir)
            local_client_1 = LocalClient(self.local_nxdrive_folder_1)

            # Make sure user1 workspace is created and fetch its uid
            user_workspace_uid = user1_remote_client.make_file_in_user_workspace('File in user workspace',
                                                                                 filename='USFile.txt')['parentRef']

            # Register user workspace as a sync root for user1
            user1_remote_client.register_as_root(user_workspace_uid)

            # Start engine
            self.engine_1.start()

            # Wait for synchronization
            self.wait_sync(wait_for_async=True)
            # Check locally synchronized content
            self.assertTrue(local_client_1.exists('/My Docs'))

            # Create test folder in user workspace as user1
            test_folder_uid = user1_remote_client.make_folder(user_workspace_uid, 'test_folder')
            # Wait for synchronization
            self.wait_sync(wait_for_async=True)
            # Check locally synchronized content
            self.assertTrue(local_client_1.exists('/My Docs/test_folder'))

            # Grant ReadWrite permission to user2 on test folder
            op_input = "doc:" + test_folder_uid
            admin_remote_client.execute("Document.SetACE", op_input=op_input, user=self.user_2,
                                        permission="ReadWrite", grant="true")
            # Wait for synchronization
            self.wait_sync(wait_for_async=True)

            # Register test folder as a sync root for user2
            user2_remote_client.register_as_root(test_folder_uid)
            # Wait for synchronization
            self.wait_sync(wait_for_async=True)

            # Delete test folder
            user1_remote_client.delete(test_folder_uid)

            # Synchronize deletion
            self.wait_sync(wait_for_async=True)
            # Check locally synchronized content
            self.assertFalse(local_client_1.exists('/My Docs/test_folder'))
            self.assertEquals(len(local_client_1.get_children_info('/My Docs')), 1)
        finally:
            # Cleanup user workspace
            if user_workspace_uid is not None and admin_remote_client.exists(user_workspace_uid):
                admin_remote_client.delete(user_workspace_uid,
                                           use_trash=False)
Exemplo n.º 11
0
    def test_move_sync_root_child_to_user_workspace(self):
        """See https://jira.nuxeo.com/browse/NXP-14870"""

        admin_remote_client = self.root_remote_client
        user1_workspace_path = ('/default-domain/UserWorkspaces/'
                                'nuxeoDriveTestUser-user-1')
        try:
            # Get remote  and local clients
            remote_user1 = RemoteDocumentClient(
                self.nuxeo_url, self.user_1, u'nxdrive-test-device-1',
                self.version, password=self.password_1,
                upload_tmp_dir=self.upload_tmp_dir)
            remote_user2 = RemoteDocumentClient(
                self.nuxeo_url, self.user_2, u'nxdrive-test-device-2',
                self.version, password=self.password_2,
                upload_tmp_dir=self.upload_tmp_dir)
            local_user2 = LocalClient(self.local_nxdrive_folder_2)

            # Make sure personal workspace is created for user1
            remote_user1.make_file_in_user_workspace('File in user workspace',
                                                     filename='UWFile.txt')

            # As user1 register personal workspace as a sync root
            remote_user1.register_as_root(user1_workspace_path)

            # As user1 create a parent folder in user1's personal workspace
            remote_user1.make_folder(user1_workspace_path, 'Parent')

            # As user1 grant Everything permission to user2 on parent folder
            parent_folder_path = user1_workspace_path + '/Parent'
            op_input = "doc:" + parent_folder_path
            admin_remote_client.execute("Document.SetACE",
                op_input=op_input,
                user="******",
                permission="Everything",
                grant="true")

            # As user1 create a child folder in parent folder
            remote_user1.make_folder(parent_folder_path, 'Child')

            # As user2 register parent folder as a sync root
            remote_user2.register_as_root(parent_folder_path)

            # Bind server for user2
            ctl_2 = self.controller_2
            ctl_2.bind_server(self.local_nxdrive_folder_2, self.nuxeo_url,
                            self.user_2, self.password_2)

            # Launch first synchronization
            syn_2 = ctl_2.synchronizer
            self._synchronize(syn_2)

            # Check locally synchronized content
            self.assertEquals(len(local_user2.get_children_info('/')), 1)
            self.assertTrue(local_user2.exists('/Parent'))
            self.assertTrue(local_user2.exists('/Parent/Child'))

            # As user1 move child folder to user1's personal workspace
            remote_user1.move(parent_folder_path + '/Child',
                              user1_workspace_path)

            # Synchronize
            self._synchronize(syn_2)

            # Check locally synchronized content
            self.assertFalse(local_user2.exists('/Parent/Child'))

        finally:
            # Cleanup user1 personal workspace
            if admin_remote_client.exists(user1_workspace_path):
                admin_remote_client.delete(user1_workspace_path,
                                           use_trash=False)
Exemplo n.º 12
0
    def test_sync_delete_shared_folder(self):
        user_workspaces_path = '/default-domain/UserWorkspaces/'
        user1_workspace_title = 'nuxeoDriveTestUser-user-1'
        user1_workspace_path = user_workspaces_path + user1_workspace_title
        try:
            # Get remote and local clients
            admin_remote_client = self.root_remote_client
            user1_remote_client = RemoteDocumentClient(
                self.nuxeo_url,
                self.user_1,
                u'nxdrive-test-device-1',
                self.version,
                password=self.password_1,
                upload_tmp_dir=self.upload_tmp_dir)
            user2_remote_client = RemoteDocumentClient(
                self.nuxeo_url,
                self.user_2,
                u'nxdrive-test-device-2',
                self.version,
                password=self.password_2,
                upload_tmp_dir=self.upload_tmp_dir)
            local_client_1 = LocalClient(self.local_nxdrive_folder_1)

            # Activate permission hierarchy profile as Administrator
            admin_remote_client.activate_profile('permission')

            # Make sure user1 workspace is created
            user1_remote_client.make_file_in_user_workspace(
                'File in user workspace', filename='USFile.txt')

            # Register user workspace as a sync root for user1
            user1_remote_client.register_as_root(user1_workspace_path)

            # Bind server for user1
            ctl_1 = self.controller_1
            ctl_1.bind_server(self.local_nxdrive_folder_1, self.nuxeo_url,
                              self.user_1, self.password_1)
            syn_1 = ctl_1.synchronizer

            # Synchronize
            self._synchronize(syn_1)
            # Check locally synchronized content
            self.assertTrue(local_client_1.exists('/My Docs'))

            # Create test folder in user workspace as user1
            user1_remote_client.make_folder(user1_workspace_path,
                                            'test_folder')
            # Synchronize
            self._synchronize(syn_1)
            # Check locally synchronized content
            self.assertTrue(local_client_1.exists('/My Docs/test_folder'))

            # Grant ReadWrite permission to user2 on test folder
            test_folder_path = user1_workspace_path + '/test_folder'
            op_input = "doc:" + test_folder_path
            admin_remote_client.execute("Document.SetACE",
                                        op_input=op_input,
                                        user="******",
                                        permission="ReadWrite",
                                        grant="true")

            # Register test folder as a sync root for user2
            user2_remote_client.register_as_root(test_folder_path)

            # Wait for a while:
            time.sleep(2.0)

            # Delete test folder
            user1_remote_client.delete(test_folder_path)

            # Synchronize
            self._synchronize(syn_1)
            # Check locally synchronized content
            self.assertFalse(local_client_1.exists('/My Docs/test_folder'))
            self.assertEquals(
                len(local_client_1.get_children_info('/My Docs')), 1)
        finally:
            # Cleanup user workspace
            if admin_remote_client.exists(user1_workspace_path):
                admin_remote_client.delete(user1_workspace_path,
                                           use_trash=False)
            # Deactivate permission hierarchy profile
            admin_remote_client.deactivate_profile('permission')
    def test_move_sync_root_child_to_user_workspace(self):
        """See https://jira.nuxeo.com/browse/NXP-14870"""
        admin_remote_client = self.root_remote_client
        user1_workspace_uid = None
        try:
            # Get remote  and local clients
            remote_user1 = RemoteDocumentClient(
                self.nuxeo_url, self.user_1, u'nxdrive-test-device-1',
                self.version, password=self.password_1,
                upload_tmp_dir=self.upload_tmp_dir)
            remote_user2 = RemoteDocumentClient(
                self.nuxeo_url, self.user_2, u'nxdrive-test-device-2',
                self.version, password=self.password_2,
                upload_tmp_dir=self.upload_tmp_dir)
            local_user2 = LocalClient(self.local_nxdrive_folder_2)

            # Make sure personal workspace is created for user1 and fetch its uid
            user1_workspace_uid = remote_user1.make_file_in_user_workspace('File in user workspace',
                                                                           filename='UWFile.txt')['parentRef']

            # As user1 register personal workspace as a sync root
            remote_user1.register_as_root(user1_workspace_uid)

            # As user1 create a parent folder in user1's personal workspace
            parent_folder_uid = remote_user1.make_folder(user1_workspace_uid, 'Parent')

            # As user1 grant Everything permission to user2 on parent folder
            op_input = "doc:" + parent_folder_uid
            admin_remote_client.execute("Document.SetACE", op_input=op_input, user="******",
                                        permission="Everything", grant="true")

            # As user1 create a child folder in parent folder
            child_folder_uid = remote_user1.make_folder(parent_folder_uid, 'Child')

            # As user2 register parent folder as a sync root
            remote_user2.register_as_root(parent_folder_uid)
            remote_user2.unregister_as_root(self.workspace)
            # Start engine for user2
            self.engine_2.start()

            # Wait for synchronization
            self.wait_sync(wait_for_async=True, wait_for_engine_1=False, wait_for_engine_2=True)

            # Check locally synchronized content
            self.assertEquals(len(local_user2.get_children_info('/')), 1)
            self.assertTrue(local_user2.exists('/Parent'))
            self.assertTrue(local_user2.exists('/Parent/Child'))

            # As user1 move child folder to user1's personal workspace
            remote_user1.move(child_folder_uid, user1_workspace_uid)

            # Wait for synchronization
            self.wait_sync(wait_for_async=True, wait_for_engine_1=False, wait_for_engine_2=True)

            # Check locally synchronized content
            self.assertFalse(local_user2.exists('/Parent/Child'))

        finally:
            # Cleanup user1 personal workspace
            if user1_workspace_uid is not None and admin_remote_client.exists(user1_workspace_uid):
                admin_remote_client.delete(user1_workspace_uid,
                                           use_trash=False)
    def test_sync_delete_shared_folder(self):
        user_workspaces_path = '/default-domain/UserWorkspaces/'
        user1_workspace_title = 'nuxeoDriveTestUser-user-1'
        user1_workspace_path = user_workspaces_path + user1_workspace_title
        try:
            # Get remote and local clients
            admin_remote_client = self.root_remote_client
            user1_remote_client = RemoteDocumentClient(
                self.nuxeo_url, self.user_1, u'nxdrive-test-device-1',
                self.version, password=self.password_1,
                upload_tmp_dir=self.upload_tmp_dir)
            user2_remote_client = RemoteDocumentClient(
                self.nuxeo_url, self.user_2, u'nxdrive-test-device-2',
                self.version, password=self.password_2,
                upload_tmp_dir=self.upload_tmp_dir)
            local_client_1 = LocalClient(self.local_nxdrive_folder_1)

            # Activate permission hierarchy profile as Administrator
            admin_remote_client.activate_profile('permission')

            # Make sure user1 workspace is created
            user1_remote_client.make_file_in_user_workspace(
                                                    'File in user workspace',
                                                    filename='USFile.txt')

            # Register user workspace as a sync root for user1
            user1_remote_client.register_as_root(user1_workspace_path)

            # Bind server for user1
            ctl_1 = self.controller_1
            ctl_1.bind_server(self.local_nxdrive_folder_1, self.nuxeo_url,
                            self.user_1, self.password_1)
            syn_1 = ctl_1.synchronizer

            # Synchronize
            self._synchronize(syn_1)
            # Check locally synchronized content
            self.assertTrue(local_client_1.exists('/My Docs'))

            # Create test folder in user workspace as user1
            user1_remote_client.make_folder(user1_workspace_path,
                                            'test_folder')
            # Synchronize
            self._synchronize(syn_1)
            # Check locally synchronized content
            self.assertTrue(local_client_1.exists('/My Docs/test_folder'))

            # Grant ReadWrite permission to user2 on test folder
            test_folder_path = user1_workspace_path + '/test_folder'
            op_input = "doc:" + test_folder_path
            admin_remote_client.execute("Document.SetACE",
                op_input=op_input,
                user="******",
                permission="ReadWrite",
                grant="true")

            # Register test folder as a sync root for user2
            user2_remote_client.register_as_root(test_folder_path)

            # Wait for a while:
            time.sleep(2.0)

            # Delete test folder
            user1_remote_client.delete(test_folder_path)

            # Synchronize
            self._synchronize(syn_1)
            # Check locally synchronized content
            self.assertFalse(local_client_1.exists('/My Docs/test_folder'))
            self.assertEquals(len(local_client_1.get_children_info(
                                                            '/My Docs')), 1)
        finally:
            # Cleanup user workspace
            if admin_remote_client.exists(user1_workspace_path):
                admin_remote_client.delete(user1_workspace_path,
                                           use_trash=False)
            # Deactivate permission hierarchy profile
            admin_remote_client.deactivate_profile('permission')
Exemplo n.º 15
0
    def test_sync_delete_root(self):
        user_workspaces_path = '/default-domain/UserWorkspaces/'
        user_workspace_title = 'nuxeoDriveTestUser-user-1'
        user_workspace_path = user_workspaces_path + user_workspace_title
        try:
            # Get remote and local clients
            admin_remote_client = self.root_remote_client
            user_remote_client = RemoteDocumentClient(
                self.nuxeo_url,
                self.user_1,
                u'nxdrive-test-device-1',
                self.version,
                password=self.password_1,
                upload_tmp_dir=self.upload_tmp_dir)
            local_client = LocalClient(self.local_nxdrive_folder_1)

            # Activate permission hierarchy profile as Administrator
            admin_remote_client.activate_profile('permission')

            # Make sure user workspace is created
            user_remote_client.make_file_in_user_workspace(
                'File in user workspace', filename='USFile.txt')
            # Bind server
            ctl = self.controller_1
            ctl.bind_server(self.local_nxdrive_folder_1, self.nuxeo_url,
                            self.user_1, self.password_1)
            syn = ctl.synchronizer

            # Create test folder in user workspace as test user
            user_remote_client.make_folder(user_workspace_path, 'test_folder')
            test_folder_path = user_workspace_path + '/test_folder'
            # Create a document in the test folder
            user_remote_client.make_file(test_folder_path, 'test_file.txt',
                                         "Some content.")

            # Register test folder as a sync root
            user_remote_client.register_as_root(test_folder_path)

            # Synchronize
            self._synchronize(syn)

            # Check locally synchronized content
            self.assertTrue(local_client.exists('/My Docs/test_folder'))
            self.assertTrue(
                local_client.exists('/My Docs/test_folder/test_file.txt'))

            # Delete test folder
            user_remote_client.delete(test_folder_path)

            # Synchronize
            self._synchronize(syn)

            # Check locally synchronized content
            self.assertFalse(local_client.exists('/My Docs/test_folder'))
            self.assertEquals(len(local_client.get_children_info('/My Docs')),
                              0)
        finally:
            # Cleanup user workspace
            if admin_remote_client.exists(user_workspace_path):
                admin_remote_client.delete(user_workspace_path,
                                           use_trash=False)
            # Deactivate permission hierarchy profile
            admin_remote_client.deactivate_profile('permission')
Exemplo n.º 16
0
    def test_sync_unshared_folder(self):
        user_workspace_uid = None
        try:
            # Get remote and local clients
            admin_remote_client = self.root_remote_client
            user1_remote_client = RemoteDocumentClient(
                self.nuxeo_url,
                self.user_1,
                u'nxdrive-test-device-1',
                self.version,
                password=self.password_1,
                upload_tmp_dir=self.upload_tmp_dir)
            user2_remote_client = RemoteDocumentClient(
                self.nuxeo_url,
                self.user_2,
                u'nxdrive-test-device-2',
                self.version,
                password=self.password_2,
                upload_tmp_dir=self.upload_tmp_dir)
            local_client_1 = LocalClient(self.local_nxdrive_folder_1)
            local_client_2 = LocalClient(self.local_nxdrive_folder_2)

            # Make sure user1 workspace is created and fetch its uid
            user_workspace_uid = user1_remote_client.make_file_in_user_workspace(
                'File in user workspace', filename='USFile.txt')['parentRef']

            # Register user workspace as a sync root for user1
            user1_remote_client.register_as_root(user_workspace_uid)

            # Start engine
            self.engine_2.start()

            # Wait for synchronization
            self.wait_sync(wait_for_async=True,
                           wait_for_engine_2=True,
                           wait_for_engine_1=False)
            # Check locally synchronized content
            self.assertTrue(local_client_2.exists('/My Docs'))
            self.assertTrue(local_client_2.exists('/Other Docs'))

            # Create test folder in user workspace as user1
            test_folder_uid = user1_remote_client.make_folder(
                user_workspace_uid, 'Folder A')
            folder_b = user1_remote_client.make_folder(test_folder_uid,
                                                       'Folder B')
            folder_c = user1_remote_client.make_folder(folder_b, 'Folder C')
            folder_d = user1_remote_client.make_folder(folder_c, 'Folder D')
            folder_e = user1_remote_client.make_folder(folder_d, 'Folder E')

            # Grant ReadWrite permission to user2 on test folder
            op_input = "doc:" + test_folder_uid
            admin_remote_client.execute("Document.SetACE",
                                        op_input=op_input,
                                        user=self.user_2,
                                        permission="ReadWrite",
                                        grant="true")

            # Register test folder as a sync root for user2
            user2_remote_client.register_as_root(test_folder_uid)
            # Wait for synchronization
            self.wait_sync(wait_for_async=True,
                           wait_for_engine_2=True,
                           wait_for_engine_1=False)
            self.assertTrue(local_client_2.exists('/Other Docs/Folder A'))
            self.assertTrue(
                local_client_2.exists(
                    '/Other Docs/Folder A/Folder B/Folder C/Folder D/Folder E')
            )
            # Use for later get_fs_item checks
            folder_b_fs = local_client_2.get_remote_id(
                '/Other Docs/Folder A/Folder B')
            folder_a_fs = local_client_2.get_remote_id('/Other Docs/Folder A')
            # Unshare Folder A and share Folder C
            admin_remote_client.execute("Document.RemoveACL",
                                        op_input=op_input,
                                        acl='local')
            op_input = "doc:" + folder_c
            admin_remote_client.execute("Document.SetACE",
                                        op_input=op_input,
                                        user=self.user_2,
                                        permission="Read",
                                        grant="true")
            user2_remote_client.register_as_root(folder_c)
            self.wait_sync(wait_for_async=True,
                           wait_for_engine_2=True,
                           wait_for_engine_1=False)
            self.assertFalse(local_client_2.exists('/Other Docs/Folder A'))
            self.assertTrue(local_client_2.exists('/Other Docs/Folder C'))
            self.assertTrue(
                local_client_2.exists(
                    '/Other Docs/Folder C/Folder D/Folder E'))

            # Verify that we dont have any 403 errors
            self.assertIsNone(
                self.remote_file_system_client_2.get_fs_item(folder_a_fs))
            self.assertIsNone(
                self.remote_file_system_client_2.get_fs_item(folder_b_fs))
        finally:
            # Cleanup user workspace
            if user_workspace_uid is not None and admin_remote_client.exists(
                    user_workspace_uid):
                admin_remote_client.delete(user_workspace_uid, use_trash=False)
    def test_sync_delete_root(self):
        user_workspaces_path = '/default-domain/UserWorkspaces/'
        user_workspace_title = 'nuxeoDriveTestUser-user-1'
        user_workspace_path = user_workspaces_path + user_workspace_title
        try:
            # Get remote and local clients
            admin_remote_client = self.root_remote_client
            user_remote_client = RemoteDocumentClient(
                self.nuxeo_url, self.user_1, u'nxdrive-test-device-1',
                self.version, password=self.password_1,
                upload_tmp_dir=self.upload_tmp_dir)
            local_client = LocalClient(self.local_nxdrive_folder_1)

            # Activate permission hierarchy profile as Administrator
            admin_remote_client.activate_profile('permission')

            # Make sure user workspace is created
            user_remote_client.make_file_in_user_workspace(
                                                    'File in user workspace',
                                                    filename='USFile.txt')
            # Bind server
            ctl = self.controller_1
            ctl.bind_server(self.local_nxdrive_folder_1, self.nuxeo_url,
                            self.user_1, self.password_1)
            syn = ctl.synchronizer

            # Create test folder in user workspace as test user
            user_remote_client.make_folder(user_workspace_path, 'test_folder')
            test_folder_path = user_workspace_path + '/test_folder'
            # Create a document in the test folder
            user_remote_client.make_file(test_folder_path, 'test_file.txt',
                                        "Some content.")

            # Register test folder as a sync root
            user_remote_client.register_as_root(test_folder_path)

            # Synchronize
            self._synchronize(syn)

            # Check locally synchronized content
            self.assertTrue(local_client.exists('/My Docs/test_folder'))
            self.assertTrue(local_client.exists(
                                        '/My Docs/test_folder/test_file.txt'))

            # Delete test folder
            user_remote_client.delete(test_folder_path)

            # Synchronize
            self._synchronize(syn)

            # Check locally synchronized content
            self.assertFalse(local_client.exists('/My Docs/test_folder'))
            self.assertEquals(len(local_client.get_children_info('/My Docs')),
                              0)
        finally:
            # Cleanup user workspace
            if admin_remote_client.exists(user_workspace_path):
                admin_remote_client.delete(user_workspace_path,
                                           use_trash=False)
            # Deactivate permission hierarchy profile
            admin_remote_client.deactivate_profile('permission')
    def test_sync_delete_root(self):
        try:
            user_workspaces_path = '/default-domain/UserWorkspaces/'
            user_workspace_title = 'nuxeoDriveTestUser_user_1'
            user_workspace_path = user_workspaces_path + user_workspace_title

            # Get remote and local clients
            admin_remote_client = self.root_remote_client
            user_remote_client = RemoteDocumentClient(
                self.nuxeo_url, self.user_1, u'nxdrive-test-device-1',
                self.version, password=self.password_1,
                upload_tmp_dir=self.upload_tmp_dir)
            local_client = LocalClient(self.local_nxdrive_folder_1)

            # Activate permission hierarchy profile as Administrator
            admin_remote_client.activate_profile('permission')

            # Bind server
            ctl = self.controller_1
            ctl.bind_server(self.local_nxdrive_folder_1, self.nuxeo_url,
                            self.user_1, self.password_1)
            syn = ctl.synchronizer

            # Create user workspace parent as Administrator if it doesn't exist
            if not admin_remote_client.exists(user_workspaces_path):
                admin_remote_client.make_folder('/default-domain',
                                                'UserWorkspaces',
                                                doc_type='UserWorkspacesRoot')

            # Create test user workspace as Administrator
            admin_remote_client.make_folder(user_workspaces_path,
                                           user_workspace_title,
                                           doc_type='Workspace')
            # Grant ReadWrite permission to test user on its workspace
            op_input = "doc:" + user_workspace_path
            admin_remote_client.execute("Document.SetACE",
                op_input=op_input,
                user="******",
                permission="ReadWrite",
                grant="true")

            # Create test folder in user workspace as test user
            user_remote_client.make_folder(user_workspace_path, 'test_folder')
            test_folder_path = user_workspace_path + '/test_folder'
            # Create a document in the test folder
            user_remote_client.make_file(test_folder_path, 'test_file.txt',
                                        "Some content.")

            # Register test folder as a sync root
            user_remote_client.register_as_root(test_folder_path)

            # Synchronize
            self._synchronize(syn)

            # Check locally synchronized content
            self.assertTrue(local_client.exists('/My Docs/test_folder'))
            self.assertTrue(local_client.exists(
                                        '/My Docs/test_folder/test_file.txt'))

            # Delete test folder
            user_remote_client.delete(test_folder_path)

            # Synchronize
            self._synchronize(syn)

            # Check locally synchronized content
            self.assertFalse(local_client.exists('/My Docs/test_folder'))
            self.assertEquals(len(local_client.get_children_info('/My Docs')),
                              0)
        finally:
            # Cleanup user workspace
            if admin_remote_client.exists(user_workspace_path):
                admin_remote_client.delete(user_workspace_path,
                                           use_trash=False)
            # Deactivate permission hierarchy profile
            admin_remote_client.deactivate_profile('permission')
Exemplo n.º 19
0
    def test_move_sync_root_child_to_user_workspace(self):
        """See https://jira.nuxeo.com/browse/NXP-14870"""

        admin_remote_client = self.root_remote_client
        user1_workspace_path = ('/default-domain/UserWorkspaces/'
                                'nuxeoDriveTestUser-user-1')
        try:
            # Get remote  and local clients
            remote_user1 = RemoteDocumentClient(
                self.nuxeo_url,
                self.user_1,
                u'nxdrive-test-device-1',
                self.version,
                password=self.password_1,
                upload_tmp_dir=self.upload_tmp_dir)
            remote_user2 = RemoteDocumentClient(
                self.nuxeo_url,
                self.user_2,
                u'nxdrive-test-device-2',
                self.version,
                password=self.password_2,
                upload_tmp_dir=self.upload_tmp_dir)
            local_user2 = LocalClient(self.local_nxdrive_folder_2)

            # Make sure personal workspace is created for user1
            remote_user1.make_file_in_user_workspace('File in user workspace',
                                                     filename='UWFile.txt')

            # As user1 register personal workspace as a sync root
            remote_user1.register_as_root(user1_workspace_path)

            # As user1 create a parent folder in user1's personal workspace
            remote_user1.make_folder(user1_workspace_path, 'Parent')

            # As user1 grant Everything permission to user2 on parent folder
            parent_folder_path = user1_workspace_path + '/Parent'
            op_input = "doc:" + parent_folder_path
            admin_remote_client.execute("Document.SetACE",
                                        op_input=op_input,
                                        user="******",
                                        permission="Everything",
                                        grant="true")

            # As user1 create a child folder in parent folder
            remote_user1.make_folder(parent_folder_path, 'Child')

            # As user2 register parent folder as a sync root
            remote_user2.register_as_root(parent_folder_path)

            # Bind server for user2
            ctl_2 = self.controller_2
            ctl_2.bind_server(self.local_nxdrive_folder_2, self.nuxeo_url,
                              self.user_2, self.password_2)

            # Launch first synchronization
            syn_2 = ctl_2.synchronizer
            self._synchronize(syn_2)

            # Check locally synchronized content
            self.assertEquals(len(local_user2.get_children_info('/')), 1)
            self.assertTrue(local_user2.exists('/Parent'))
            self.assertTrue(local_user2.exists('/Parent/Child'))

            # As user1 move child folder to user1's personal workspace
            remote_user1.move(parent_folder_path + '/Child',
                              user1_workspace_path)

            # Synchronize
            self._synchronize(syn_2)

            # Check locally synchronized content
            self.assertFalse(local_user2.exists('/Parent/Child'))

        finally:
            # Cleanup user1 personal workspace
            if admin_remote_client.exists(user1_workspace_path):
                admin_remote_client.delete(user1_workspace_path,
                                           use_trash=False)
    def test_sync_unshared_folder(self):
        user_workspace_uid = None
        try:
            # Get remote and local clients
            admin_remote_client = self.root_remote_client
            user1_remote_client = RemoteDocumentClient(
                self.nuxeo_url, self.user_1, u'nxdrive-test-device-1',
                self.version, password=self.password_1,
                upload_tmp_dir=self.upload_tmp_dir)
            user2_remote_client = RemoteDocumentClient(
                self.nuxeo_url, self.user_2, u'nxdrive-test-device-2',
                self.version, password=self.password_2,
                upload_tmp_dir=self.upload_tmp_dir)
            local_client_1 = LocalClient(self.local_nxdrive_folder_1)
            local_client_2 = LocalClient(self.local_nxdrive_folder_2)

            # Make sure user1 workspace is created and fetch its uid
            user_workspace_uid = user1_remote_client.make_file_in_user_workspace('File in user workspace',
                                                                                 filename='USFile.txt')['parentRef']

            # Register user workspace as a sync root for user1
            user1_remote_client.register_as_root(user_workspace_uid)

            # Start engine
            self.engine_2.start()

            # Wait for synchronization
            self.wait_sync(wait_for_async=True, wait_for_engine_2=True, wait_for_engine_1=False)
            # Check locally synchronized content
            self.assertTrue(local_client_2.exists('/My Docs'))
            self.assertTrue(local_client_2.exists('/Other Docs'))

            # Create test folder in user workspace as user1
            test_folder_uid = user1_remote_client.make_folder(user_workspace_uid, 'Folder A')
            folder_b = user1_remote_client.make_folder(test_folder_uid, 'Folder B')
            folder_c = user1_remote_client.make_folder(folder_b, 'Folder C')
            folder_d = user1_remote_client.make_folder(folder_c, 'Folder D')
            folder_e = user1_remote_client.make_folder(folder_d, 'Folder E')

            # Grant ReadWrite permission to user2 on test folder
            op_input = "doc:" + test_folder_uid
            admin_remote_client.execute("Document.SetACE", op_input=op_input, user=self.user_2,
                                        permission="ReadWrite", grant="true")

            # Register test folder as a sync root for user2
            user2_remote_client.register_as_root(test_folder_uid)
            # Wait for synchronization
            self.wait_sync(wait_for_async=True, wait_for_engine_2=True, wait_for_engine_1=False)
            self.assertTrue(local_client_2.exists('/Other Docs/Folder A'))
            self.assertTrue(local_client_2.exists('/Other Docs/Folder A/Folder B/Folder C/Folder D/Folder E'))
            # Use for later get_fs_item checks
            folder_b_fs = local_client_2.get_remote_id('/Other Docs/Folder A/Folder B')
            folder_a_fs = local_client_2.get_remote_id('/Other Docs/Folder A')
            # Unshare Folder A and share Folder C
            admin_remote_client.execute("Document.RemoveACL", op_input=op_input, acl='local')
            op_input = "doc:" + folder_c
            admin_remote_client.execute("Document.SetACE", op_input=op_input, user=self.user_2,
                                        permission="Read", grant="true")
            user2_remote_client.register_as_root(folder_c)
            self.wait_sync(wait_for_async=True, wait_for_engine_2=True, wait_for_engine_1=False)
            self.assertFalse(local_client_2.exists('/Other Docs/Folder A'))
            self.assertTrue(local_client_2.exists('/Other Docs/Folder C'))
            self.assertTrue(local_client_2.exists('/Other Docs/Folder C/Folder D/Folder E'))

            # Verify that we dont have any 403 errors
            self.assertIsNone(self.remote_file_system_client_2.get_fs_item(folder_a_fs))
            self.assertIsNone(self.remote_file_system_client_2.get_fs_item(folder_b_fs))
        finally:
            # Cleanup user workspace
            if user_workspace_uid is not None and admin_remote_client.exists(user_workspace_uid):
                admin_remote_client.delete(user_workspace_uid,
                                           use_trash=False)
Exemplo n.º 21
0
    def test_sync_delete_shared_folder(self):
        user_workspace_uid = None
        try:
            # Get remote and local clients
            admin_remote_client = self.root_remote_client
            user1_remote_client = RemoteDocumentClient(
                self.nuxeo_url,
                self.user_1,
                u'nxdrive-test-device-1',
                self.version,
                password=self.password_1,
                upload_tmp_dir=self.upload_tmp_dir)
            user2_remote_client = RemoteDocumentClient(
                self.nuxeo_url,
                self.user_2,
                u'nxdrive-test-device-2',
                self.version,
                password=self.password_2,
                upload_tmp_dir=self.upload_tmp_dir)
            local_client_1 = LocalClient(self.local_nxdrive_folder_1)

            # Make sure user1 workspace is created and fetch its uid
            user_workspace_uid = user1_remote_client.make_file_in_user_workspace(
                'File in user workspace', filename='USFile.txt')['parentRef']

            # Register user workspace as a sync root for user1
            user1_remote_client.register_as_root(user_workspace_uid)

            # Start engine
            self.engine_1.start()

            # Wait for synchronization
            self.wait_sync(wait_for_async=True)
            # Check locally synchronized content
            self.assertTrue(local_client_1.exists('/My Docs'))

            # Create test folder in user workspace as user1
            test_folder_uid = user1_remote_client.make_folder(
                user_workspace_uid, 'test_folder')
            # Wait for synchronization
            self.wait_sync(wait_for_async=True)
            # Check locally synchronized content
            self.assertTrue(local_client_1.exists('/My Docs/test_folder'))

            # Grant ReadWrite permission to user2 on test folder
            op_input = "doc:" + test_folder_uid
            admin_remote_client.execute("Document.SetACE",
                                        op_input=op_input,
                                        user="******",
                                        permission="ReadWrite",
                                        grant="true")
            # Wait for synchronization
            self.wait_sync(wait_for_async=True)

            # Register test folder as a sync root for user2
            user2_remote_client.register_as_root(test_folder_uid)
            # Wait for synchronization
            self.wait_sync(wait_for_async=True)

            # Delete test folder
            user1_remote_client.delete(test_folder_uid)

            # Synchronize deletion
            self.wait_sync(wait_for_async=True)
            # Check locally synchronized content
            self.assertFalse(local_client_1.exists('/My Docs/test_folder'))
            self.assertEquals(
                len(local_client_1.get_children_info('/My Docs')), 1)
        finally:
            # Cleanup user workspace
            if user_workspace_uid is not None and admin_remote_client.exists(
                    user_workspace_uid):
                admin_remote_client.delete(user_workspace_uid, use_trash=False)
Exemplo n.º 22
0
    def test_move_sync_root_child_to_user_workspace(self):
        """See https://jira.nuxeo.com/browse/NXP-14870"""
        admin_remote_client = self.root_remote_client
        user1_workspace_uid = None
        try:
            # Get remote  and local clients
            remote_user1 = RemoteDocumentClient(
                self.nuxeo_url,
                self.user_1,
                u'nxdrive-test-device-1',
                self.version,
                password=self.password_1,
                upload_tmp_dir=self.upload_tmp_dir)
            remote_user2 = RemoteDocumentClient(
                self.nuxeo_url,
                self.user_2,
                u'nxdrive-test-device-2',
                self.version,
                password=self.password_2,
                upload_tmp_dir=self.upload_tmp_dir)
            local_user2 = LocalClient(self.local_nxdrive_folder_2)

            # Make sure personal workspace is created for user1 and fetch its uid
            user1_workspace_uid = remote_user1.make_file_in_user_workspace(
                'File in user workspace', filename='UWFile.txt')['parentRef']

            # As user1 register personal workspace as a sync root
            remote_user1.register_as_root(user1_workspace_uid)

            # As user1 create a parent folder in user1's personal workspace
            parent_folder_uid = remote_user1.make_folder(
                user1_workspace_uid, 'Parent')

            # As user1 grant Everything permission to user2 on parent folder
            op_input = "doc:" + parent_folder_uid
            admin_remote_client.execute("Document.SetACE",
                                        op_input=op_input,
                                        user=self.user_2,
                                        permission="Everything",
                                        grant="true")

            # As user1 create a child folder in parent folder
            child_folder_uid = remote_user1.make_folder(
                parent_folder_uid, 'Child')

            # As user2 register parent folder as a sync root
            remote_user2.register_as_root(parent_folder_uid)
            remote_user2.unregister_as_root(self.workspace)
            # Start engine for user2
            self.engine_2.start()

            # Wait for synchronization
            self.wait_sync(wait_for_async=True,
                           wait_for_engine_1=False,
                           wait_for_engine_2=True)

            # Check locally synchronized content
            self.assertEquals(len(local_user2.get_children_info('/')), 1)
            self.assertTrue(local_user2.exists('/Parent'))
            self.assertTrue(local_user2.exists('/Parent/Child'))

            # As user1 move child folder to user1's personal workspace
            remote_user1.move(child_folder_uid, user1_workspace_uid)

            # Wait for synchronization
            self.wait_sync(wait_for_async=True,
                           wait_for_engine_1=False,
                           wait_for_engine_2=True)

            # Check locally synchronized content
            self.assertFalse(local_user2.exists('/Parent/Child'))

        finally:
            # Cleanup user1 personal workspace
            if user1_workspace_uid is not None and admin_remote_client.exists(
                    user1_workspace_uid):
                admin_remote_client.delete(user1_workspace_uid,
                                           use_trash=False)