예제 #1
0
    def test_node_pub_addr(self):
        self.node_q.append(self.node1)
        self.node_q.append(self.node2)

        # Client side
        drain_msg_queue(self.node_q, self.pub_q, addr=self.addr)

        # server side
        res = self.service.process()
        res = self.service.process()
        self.assertEqual(list(self.node_q), [])
        self.assertEqual(list(self.pub_q), ['deadbeef01', '20beefdead'])
        self.assertEqual(res, [self.node1, self.node2])
예제 #2
0
    def test_node_pub_offline(self):
        self.node_q.append(self.node1)
        self.node_q.append(self.node2)
        self.node_q.append(self.node1)

        # Client side
        drain_msg_queue(self.node_q, tmp_q=self.tmp_q, addr=self.addr, method='offline')

        # server side
        res = self.service.process()
        res = self.service.process()
        res = self.service.process()
        self.assertEqual(list(self.node_q), [])
        self.assertEqual(self.off_list, ['deadbeef01', '20beefdead'])
        self.assertEqual(res, [self.node1, self.node2])
예제 #3
0
async def main():
    """State cache updater to retrieve data from a local ZeroTier node."""
    async with aiohttp.ClientSession() as session:
        ZT_API = get_token()
        client = ZeroTier(ZT_API, loop, session)

        try:
            logger.debug('{} node(s) in offline queue: {}'.format(
                len(off_q), list(off_q)))
            if len(off_q) > 0:
                drain_msg_queue(off_q, addr='127.0.0.1', method='offline')

            logger.debug('{} node(s) in wedged queue: {}'.format(
                len(wdg_q), list(wdg_q)))
            if len(wdg_q) > 0:
                drain_msg_queue(wdg_q, addr='127.0.0.1', method='wedged')

            logger.debug('{} node(s) in reg queue: {}'.format(
                len(reg_q), list(reg_q)))
            logger.debug('{} node(s) in wait queue: {}'.format(
                len(wait_q), list(wait_q)))
            manage_incoming_nodes(node_q, reg_q, wait_q)
            if len(reg_q) > 0:
                drain_msg_queue(reg_q, pub_q, addr='127.0.0.1')

            # get status details of the local node and update state
            await client.get_data('status')
            node_id = handle_node_status(client.data, cache)

            # get status details of the node peers
            await client.get_data('peer')
            peer_data = client.data
            logger.info('Found {} peers'.format(len(peer_data)))
            peer_keys = find_keys(cache, 'peer')
            logger.debug('Returned peer keys: {}'.format(peer_keys))
            load_cache_by_type(cache, peer_data, 'peer')

            num_leaves = 0
            peerStatus = get_peer_status(cache)
            for peer in peerStatus:
                if peer['role'] == 'LEAF':
                    if peer['identity'] not in reg_q:
                        if peer['identity'] not in node_q:
                            node_q.append(peer['identity'])
                            logger.debug('Adding LEAF node id: {}'.format(
                                peer['identity']))
                    populate_leaf_list(node_q, wait_q, tmp_q, peer)
                    num_leaves = num_leaves + 1
            if num_leaves == 0 and st.leaf_nodes != []:
                st.leaf_nodes = []
            if st.leaf_nodes != []:
                logger.debug('Found {} leaf node(s)'.format(num_leaves))
            logger.debug('{} node(s) in node queue: {}'.format(
                len(node_q), list(node_q)))

            logger.debug('{} node(s) in reg queue: {}'.format(
                len(reg_q), list(reg_q)))
            logger.debug('{} node(s) in wait queue: {}'.format(
                len(wait_q), list(wait_q)))
            manage_incoming_nodes(node_q, reg_q, wait_q)
            if len(reg_q) > 0:
                drain_msg_queue(reg_q, pub_q, addr='127.0.0.1')

            logger.debug('{} node(s) in node queue: {}'.format(
                len(node_q), list(node_q)))
            logger.debug('{} node(s) in pub queue: {}'.format(
                len(pub_q), list(pub_q)))
            logger.debug('{} node(s) in active queue: {}'.format(
                len(cfg_q), list(cfg_q)))

        except Exception as exc:
            logger.error('peerstate exception was: {}'.format(exc))
            raise exc