test: Added test coverage to listsinceblock rpc

This change adds a test to add coverage to the rpc error that emmits the message "Can't
read block from disk"
This commit is contained in:
kevkevinpal 2024-05-29 21:20:19 -04:00
parent f15778536a
commit 881724d443
No known key found for this signature in database
GPG Key ID: B4346A15246A925D

View File

@ -40,6 +40,7 @@ class ListSinceBlockTest(BitcoinTestFramework):
self.test_no_blockhash() self.test_no_blockhash()
self.test_invalid_blockhash() self.test_invalid_blockhash()
self.test_reorg() self.test_reorg()
self.test_cant_read_block()
self.test_double_spend() self.test_double_spend()
self.test_double_send() self.test_double_send()
self.double_spends_filtered() self.double_spends_filtered()
@ -167,6 +168,31 @@ class ListSinceBlockTest(BitcoinTestFramework):
found = next(tx for tx in transactions if tx['txid'] == senttx) found = next(tx for tx in transactions if tx['txid'] == senttx)
assert_equal(found['blockheight'], self.nodes[0].getblockheader(nodes2_first_blockhash)['height']) assert_equal(found['blockheight'], self.nodes[0].getblockheader(nodes2_first_blockhash)['height'])
def test_cant_read_block(self):
self.log.info('Test the RPC error "Can\'t read block from disk"')
# Split network into two
self.split_network()
# generate on both sides
nodes1_last_blockhash = self.generate(self.nodes[1], 6, sync_fun=lambda: self.sync_all(self.nodes[:2]))[-1]
self.generate(self.nodes[2], 7, sync_fun=lambda: self.sync_all(self.nodes[2:]))[0]
self.join_network()
# Renaming the block file to induce unsuccessful block read
blk_dat = (self.nodes[0].blocks_path / "blk00000.dat")
blk_dat_moved = blk_dat.rename(self.nodes[0].blocks_path / "blk00000.dat.moved")
assert not blk_dat.exists()
# listsinceblock(nodes1_last_blockhash) should now fail as blocks are not accessible
assert_raises_rpc_error(-32603, "Can't read block from disk",
self.nodes[0].listsinceblock, nodes1_last_blockhash)
# Restoring block file
blk_dat_moved.rename(self.nodes[0].blocks_path / "blk00000.dat")
assert blk_dat.exists()
def test_double_spend(self): def test_double_spend(self):
''' '''
This tests the case where the same UTXO is spent twice on two separate This tests the case where the same UTXO is spent twice on two separate