@@ -40,6 +40,7 @@ def run_test(self):
40
40
self .test_no_blockhash ()
41
41
self .test_invalid_blockhash ()
42
42
self .test_reorg ()
43
+ self .test_cant_read_block ()
43
44
self .test_double_spend ()
44
45
self .test_double_send ()
45
46
self .double_spends_filtered ()
@@ -167,6 +168,31 @@ def test_reorg(self):
167
168
found = next (tx for tx in transactions if tx ['txid' ] == senttx )
168
169
assert_equal (found ['blockheight' ], self .nodes [0 ].getblockheader (nodes2_first_blockhash )['height' ])
169
170
171
+ def test_cant_read_block (self ):
172
+ self .log .info ('Test the RPC error "Can\' t read block from disk"' )
173
+
174
+ # Split network into two
175
+ self .split_network ()
176
+
177
+ # generate on both sides
178
+ nodes1_last_blockhash = self .generate (self .nodes [1 ], 6 , sync_fun = lambda : self .sync_all (self .nodes [:2 ]))[- 1 ]
179
+ self .generate (self .nodes [2 ], 7 , sync_fun = lambda : self .sync_all (self .nodes [2 :]))[0 ]
180
+
181
+ self .join_network ()
182
+
183
+ # Renaming the block file to induce unsuccessful block read
184
+ blk_dat = (self .nodes [0 ].blocks_path / "blk00000.dat" )
185
+ blk_dat_moved = blk_dat .rename (self .nodes [0 ].blocks_path / "blk00000.dat.moved" )
186
+ assert not blk_dat .exists ()
187
+
188
+ # listsinceblock(nodes1_last_blockhash) should now fail as blocks are not accessible
189
+ assert_raises_rpc_error (- 32603 , "Can't read block from disk" ,
190
+ self .nodes [0 ].listsinceblock , nodes1_last_blockhash )
191
+
192
+ # Restoring block file
193
+ blk_dat_moved .rename (self .nodes [0 ].blocks_path / "blk00000.dat" )
194
+ assert blk_dat .exists ()
195
+
170
196
def test_double_spend (self ):
171
197
'''
172
198
This tests the case where the same UTXO is spent twice on two separate
0 commit comments