def test_add_delete_user(self): portal = self.layer['portal'] setRoles(portal, TEST_USER_ID, ['Manager']) client = getUtility(IAdminClient) mt = getToolByName(portal, 'portal_membership') mt.addMember('stpeter', 'secret', ['Member'], []) wait_on_client_deferreds(client) # User has been added d = client.admin.getRegisteredUsers() self.assertTrue(wait_on_deferred(d)) user_jids = [user_dict['jid'] for user_dict in d.result] self.assertTrue('stpeter@localhost' in user_jids) # User's pubsub node has been added d = getAllChildNodes(client, 'people') self.assertTrue(wait_on_deferred(d)) self.assertTrue('stpeter' in d.result['people']) pass_storage = getUtility(IXMPPPasswordStorage) self.assertTrue(pass_storage.get('stpeter') is not None) mt.deleteMembers('stpeter') wait_on_client_deferreds(client) # User has been deleted d = client.admin.getRegisteredUsers() wait_on_client_deferreds(client) user_jids = [user_dict['jid'] for user_dict in d.result] self.assertTrue('stpeter@localhost' not in user_jids) self.assertTrue(pass_storage.get('stpeter') is None) # User's pubsub node has been removed d = getAllChildNodes(client, 'people') wait_on_client_deferreds(client) self.assertTrue('stpeter' not in d.result['people'])
def test_nodes(self): portal = self.layer['portal'] mt = getToolByName(portal, 'portal_membership') member_ids = set(mt.listMemberIds()) client = getUtility(IAdminClient) d = getAllChildNodes(client, None) wait_on_client_deferreds(client) tree = d.result self.assertEqual(tree[''], ['people']) self.assertTrue(member_ids.issubset(set(tree['people'])))
def setupXMPPEnvironment(client, member_jids=[], member_passwords={}): def deleteAllNodes(result): nodes = sum(result.values(), []) # Reverse to delete the children first, then the parents. nodes.reverse() if nodes: d = defer.DeferredList([client.deleteNode(node) for node in nodes], consumeErrors=True) return d return True def createCollections(result): if not result: return False d = client.createNode('people', options={'pubsub#node_title': 'All personal nodes', 'pubsub#node_type': 'collection', 'pubsub#collection': ''}) return d def createDummyItemNodes(result): """ XXX: This is necessary as ejabberd stupidly considers a node a collection only if it has children... """ if not result: return False d = client.createNode('dummy_people_node', options={'pubsub#collection': 'people'}) return d def subscribeAdmin(result): if not result: return False d = client.subscribe('people', JID(client.jid.userhost()), options={'pubsub#subscription_type': 'items', 'pubsub#subscription_depth': 'all'}) return d def getExistingUsers(result): if not result: return False d = client.admin.getRegisteredUsers() return d def deleteUsers(result): if not result: return False jids = [user_dict['jid'] for user_dict in result] jids.remove(client.jid.userhost()) if not jids: return True d = client.admin.deleteUsers(jids) return d def createUsers(result): if not result: return False if not member_jids: return True deferred_list = [] roster_jids = [] for member_jid in member_jids: d = setupPrincipal(client, member_jid, member_passwords[member_jid], roster_jids) roster_jids.append(member_jid) deferred_list.append(d) if deferred_list: d = defer.DeferredList(deferred_list, consumeErrors=True) return d return True d = getAllChildNodes(client, None) d.addCallback(deleteAllNodes) d.addCallback(createCollections) d.addCallback(createDummyItemNodes) d.addCallback(subscribeAdmin) d.addCallback(getExistingUsers) d.addCallback(deleteUsers) d.addCallback(createUsers) return d
def _setupXMPPEnvironment(client, member_jids=[], member_passwords={}): def deleteAllNodes(result): nodes = sum(result.values(), []) # Reverse to delete the children first, then the parents. nodes.reverse() if nodes: d = defer.DeferredList([client.deleteNode(node) for node in nodes], consumeErrors=True) return d return True def createCollections(result): if not result: return False d = client.createNode('people', options={ 'pubsub#node_title': 'All personal nodes', 'pubsub#node_type': 'collection', 'pubsub#collection': '', 'pubsub#max_items': 1000 }) return d def createDummyItemNodes(result): """ XXX: This is necessary as ejabberd stupidly considers a node a collection only if it has children... """ if not result: return False d = client.createNode('dummy_people_node', options={'pubsub#collection': 'people'}) return d def subscribeAdmin(result): if not result: return False d = client.subscribe('people', JID(client.jid.userhost()), options={ 'pubsub#subscription_type': 'items', 'pubsub#subscription_depth': 'all' }) return d def getExistingUsers(result): if not result: return False d = client.admin.getRegisteredUsers() return d def deleteUsers(result): if not result: return False jids = [user_dict['jid'] for user_dict in result] jids.remove(client.jid.userhost()) if not jids: return True d = client.admin.deleteUsers(jids) return d def createUsers(result): if not result: return False if not member_jids: return True deferred_list = [] roster_jids = [] for member_jid in member_jids: d = setupPrincipal(client, member_jid, member_passwords[member_jid], roster_jids) roster_jids.append(member_jid) deferred_list.append(d) if deferred_list: d = defer.DeferredList(deferred_list, consumeErrors=True) return d return True d = getAllChildNodes(client, None) d.addCallback(deleteAllNodes) d.addCallback(createCollections) d.addCallback(createDummyItemNodes) d.addCallback(subscribeAdmin) d.addCallback(getExistingUsers) d.addCallback(deleteUsers) d.addCallback(createUsers) return d