Example #1
0
    def clean_up(self):
        node_utils.graceful_rm(self._thread_pool, self._context.nodes.values())
        logging.info('Removed all nodes')

        utils.sleep(1)

        bash.check_output(
            bitcoincmd.fix_data_dirs_permissions(self._context.run_dir))
        logging.info('Fixed permissions of dirs')
Example #2
0
 def clean_up_docker_safe(self):
     try:
         with Pool(1) as pool:
             node_utils.graceful_rm(pool, self._context.nodes.values())
         utils.sleep(1)
         bash.check_output(dockercmd.rm_network())
         bash.check_output(
             dockercmd.fix_data_dirs_permissions(self._context.run_dir))
     except Exception:
         logging.debug("clean_up_docker_safe failed")
         pass
Example #3
0
    def _give_nodes_spendable_coins(self, threadpool):
        nodes = list(self._context.nodes.values())
        cbs = []
        for i, node in enumerate(nodes):
            cbs.append(
                threadpool.apply_async(
                    node_utils.start_node,
                    args=(node, (str(node.ip)
                                 for node in nodes[max(0, i - 5):i]))))
        for cb in cbs:
            cb.get()

        threadpool.map(node_utils.check_startup_node, nodes)

        amount_of_tx_chains = _calc_number_of_tx_chains(
            self._context.args.txs_per_tick,
            self._context.args.blocks_per_tick, len(nodes))
        logging.info(
            'Each node receives {} tx-chains'.format(amount_of_tx_chains))

        for i, node in enumerate(nodes):
            node_utils.wait_until_height_reached(node, i * amount_of_tx_chains)
            node.execute_rpc('generate', amount_of_tx_chains)
            logging.info(
                'Generated {} blocks for node={} for their tx-chains'.format(
                    amount_of_tx_chains, node.name))

        node_utils.wait_until_height_reached(nodes[0],
                                             amount_of_tx_chains * len(nodes))
        nodes[0].generate_blocks(
            config.blocks_needed_to_make_coinbase_spendable)
        current_height = config.blocks_needed_to_make_coinbase_spendable + amount_of_tx_chains * len(
            nodes)

        threadpool.starmap(node_utils.wait_until_height_reached,
                           zip(nodes, itertools.repeat(current_height)))

        # TODO fix coinbase behaviour where [Example1](#AppendixA) does not occur
        # self._pool.map(node_utils.transfer_coinbase_tx_to_normal_tx, nodes)

        for i, node in enumerate(nodes):
            node_utils.wait_until_height_reached(node, current_height + i)
            node.execute_rpc('generate', 1)

        current_height += len(nodes)
        # TODO fix
        self._context.first_block_height = 0  # current_height

        threadpool.starmap(node_utils.wait_until_height_reached,
                           zip(nodes, itertools.repeat(current_height)))

        threadpool.map(node_utils.rm_peers_file, nodes)
        node_utils.graceful_rm(threadpool, nodes)
Example #4
0
    def clean_up_docker(self):
        node_utils.graceful_rm(self._thread_pool, self._context.nodes.values())
        logging.info('Removed all nodes')

        utils.sleep(1)

        bash.check_output(dockercmd.rm_network())
        logging.info('Deleted docker network')

        bash.check_output(
            dockercmd.fix_data_dirs_permissions(self._context.run_dir))
        logging.info('Fixed permissions of dirs used by docker')
Example #5
0
    def _give_nodes_spendable_coins(self):
        # At start no node will have coins,
        # assign them manually to make for smooth run
        # We do this before the RPC is ready, making it perfect fit
        nodes = list(self._context.nodes.values())
        cbs = []
        for i, node in enumerate(nodes):
            cbs.append(
                self._pool.apply_async(
                    node_utils.start_node,
                    args=(node, (str(node.ip)
                                 for node in nodes[max(0, i - 5):i]))))
        for cb in cbs:
            cb.get()

        self._pool.map(node_utils.check_startup_node, nodes)

        amount_of_tx_chains = _calc_number_of_tx_chains(
            self._context.args.txs_per_tick,
            self._context.args.blocks_per_tick, len(nodes))
        logging.info('Each node got {} tx-chains'.format(amount_of_tx_chains))

        for i, node in enumerate(nodes):
            node_utils.wait_until_height_reached(node, i * amount_of_tx_chains)
            node.execute_rpc('generate', amount_of_tx_chains)
            logging.info(
                'Generated {} blocks for node'.format(amount_of_tx_chains))

        node_utils.wait_until_height_reached(nodes[0],
                                             amount_of_tx_chains * len(nodes))
        nodes[0].generate_blocks(
            config.blocks_needed_to_make_coinbase_spendable)
        current_height = config.blocks_needed_to_make_coinbase_spendable + amount_of_tx_chains * len(
            nodes)

        self._pool.starmap(node_utils.wait_until_height_reached,
                           zip(nodes, itertools.repeat(current_height)))

        self._pool.map(node_utils.transfer_coinbase_tx_to_normal_tx, nodes)

        for i, node in enumerate(nodes):
            node_utils.wait_until_height_reached(node, current_height + i)
            node.execute_rpc('generate', 1)

        current_height += len(nodes)
        self._context.first_block_height = current_height

        self._pool.starmap(node_utils.wait_until_height_reached,
                           zip(nodes, itertools.repeat(current_height)))

        self._pool.map(node_utils.rm_peers_file, nodes)
        node_utils.graceful_rm(self._pool, nodes)