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)
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'))
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'))
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()
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)
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)
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_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')
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_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')
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_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)
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)