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