55"""Test the getblockfrompeer RPC."""
66
77from test_framework .authproxy import JSONRPCException
8+ from test_framework .messages import NODE_WITNESS
9+ from test_framework .p2p import (
10+ P2P_SERVICES ,
11+ P2PInterface ,
12+ )
813from test_framework .test_framework import BitcoinTestFramework
914from test_framework .util import (
1015 assert_equal ,
@@ -58,6 +63,13 @@ def run_test(self):
5863 self .log .info ("Non-existent peer generates error" )
5964 assert_raises_rpc_error (- 1 , "Peer does not exist" , self .nodes [0 ].getblockfrompeer , short_tip , peer_0_peer_1_id + 1 )
6065
66+ self .log .info ("Fetching from pre-segwit peer generates error" )
67+ self .nodes [0 ].add_p2p_connection (P2PInterface (), services = P2P_SERVICES & ~ NODE_WITNESS )
68+ peers = self .nodes [0 ].getpeerinfo ()
69+ assert_equal (len (peers ), 2 )
70+ presegwit_peer_id = peers [1 ]["id" ]
71+ assert_raises_rpc_error (- 1 , "Pre-SegWit peer" , self .nodes [0 ].getblockfrompeer , short_tip , presegwit_peer_id )
72+
6173 self .log .info ("Successful fetch" )
6274 result = self .nodes [0 ].getblockfrompeer (short_tip , peer_0_peer_1_id )
6375 self .wait_until (lambda : self .check_for_block (short_tip ), timeout = 1 )
@@ -66,5 +78,6 @@ def run_test(self):
6678 self .log .info ("Don't fetch blocks we already have" )
6779 assert_raises_rpc_error (- 1 , "Block already downloaded" , self .nodes [0 ].getblockfrompeer , short_tip , peer_0_peer_1_id )
6880
81+
6982if __name__ == '__main__' :
7083 GetBlockFromPeerTest ().main ()
0 commit comments