Ejemplo n.º 1
0
    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'])
Ejemplo n.º 2
0
    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'])))
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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