Changeset View
Changeset View
Standalone View
Standalone View
test/functional/p2p_blocksonly.py
Show First 20 Lines • Show All 58 Lines • ▼ Show 20 Lines | def run_test(self): | ||||
'Check that txs from rpc are not rejected and relayed to other peers') | 'Check that txs from rpc are not rejected and relayed to other peers') | ||||
assert_equal(self.nodes[0].getpeerinfo()[0]['relaytxes'], True) | assert_equal(self.nodes[0].getpeerinfo()[0]['relaytxes'], True) | ||||
txid = self.nodes[0].testmempoolaccept([sigtx])[0]['txid'] | txid = self.nodes[0].testmempoolaccept([sigtx])[0]['txid'] | ||||
with self.nodes[0].assert_debug_log(['received getdata for: tx {} peer=1'.format(txid)]): | with self.nodes[0].assert_debug_log(['received getdata for: tx {} peer=1'.format(txid)]): | ||||
self.nodes[0].sendrawtransaction(sigtx) | self.nodes[0].sendrawtransaction(sigtx) | ||||
self.nodes[0].p2p.wait_for_tx(txid) | self.nodes[0].p2p.wait_for_tx(txid) | ||||
assert_equal(self.nodes[0].getmempoolinfo()['size'], 1) | assert_equal(self.nodes[0].getmempoolinfo()['size'], 1) | ||||
self.log.info( | |||||
'Check that txs from whitelisted peers are not rejected and relayed to others') | |||||
self.log.info( | |||||
"Restarting node 0 with whitelist permission and blocksonly") | |||||
self.restart_node(0, | |||||
["-persistmempool=0", | |||||
"-whitelist=127.0.0.1", | |||||
"-whitelistforcerelay", | |||||
"-blocksonly"]) | |||||
assert_equal(self.nodes[0].getrawmempool(), []) | |||||
first_peer = self.nodes[0].add_p2p_connection(P2PInterface()) | |||||
second_peer = self.nodes[0].add_p2p_connection(P2PInterface()) | |||||
peer_1_info = self.nodes[0].getpeerinfo()[0] | |||||
assert_equal(peer_1_info['whitelisted'], True) | |||||
assert_equal( | |||||
peer_1_info['permissions'], [ | |||||
'noban', 'forcerelay', 'relay', 'mempool']) | |||||
peer_2_info = self.nodes[0].getpeerinfo()[1] | |||||
assert_equal(peer_2_info['whitelisted'], True) | |||||
assert_equal( | |||||
peer_2_info['permissions'], [ | |||||
'noban', 'forcerelay', 'relay', 'mempool']) | |||||
assert_equal( | |||||
self.nodes[0].testmempoolaccept( | |||||
[sigtx])[0]['allowed'], True) | |||||
txid = self.nodes[0].testmempoolaccept([sigtx])[0]['txid'] | |||||
self.log.info( | |||||
'Check that the tx from whitelisted first_peer is relayed to others (ie.second_peer)') | |||||
with self.nodes[0].assert_debug_log(["received getdata"]): | |||||
first_peer.send_message(msg_tx(FromHex(CTransaction(), sigtx))) | |||||
self.log.info( | |||||
'Check that the whitelisted peer is still connected after sending the transaction') | |||||
assert_equal(first_peer.is_connected, True) | |||||
second_peer.wait_for_tx(txid) | |||||
assert_equal(self.nodes[0].getmempoolinfo()['size'], 1) | |||||
self.log.info("Whitelisted peer's transaction is accepted and relayed") | |||||
if __name__ == '__main__': | if __name__ == '__main__': | ||||
P2PBlocksOnly().main() | P2PBlocksOnly().main() |