test: split interface_ipc_mining.py into subtests
Split the Mining interface test into focused subtests. Keep the initial tip-change pre-mine check in run_mining_interface_test. As a result run_block_template_test no longer has newblockref.
This commit is contained in:
1 file changed
+40
-6
@@ -114,18 +114,21 @@ class IPCMiningTest(BitcoinTestFramework):
|
|||||||
|
|
||||||
return coinbase_tx
|
return coinbase_tx
|
||||||
|
|
||||||
|
async def make_mining_ctx(self):
|
||||||
|
"""Create IPC context and Mining proxy object."""
|
||||||
|
ctx, init = await make_capnp_init_ctx(self)
|
||||||
|
self.log.debug("Create Mining proxy object")
|
||||||
|
mining = init.makeMining(ctx).result
|
||||||
|
return ctx, mining
|
||||||
|
|
||||||
def run_mining_interface_test(self):
|
def run_mining_interface_test(self):
|
||||||
"""Test Mining interface methods."""
|
"""Test Mining interface methods."""
|
||||||
self.log.info("Running Mining interface test")
|
self.log.info("Running Mining interface test")
|
||||||
block_hash_size = 32
|
block_hash_size = 32
|
||||||
block_header_size = 80
|
|
||||||
timeout = 1000.0 # 1000 milliseconds
|
timeout = 1000.0 # 1000 milliseconds
|
||||||
miniwallet = MiniWallet(self.nodes[0])
|
|
||||||
|
|
||||||
async def async_routine():
|
async def async_routine():
|
||||||
ctx, init = await make_capnp_init_ctx(self)
|
ctx, mining = await self.make_mining_ctx()
|
||||||
self.log.debug("Create Mining proxy object")
|
|
||||||
mining = init.makeMining(ctx).result
|
|
||||||
blockref = await mining.getTip(ctx)
|
blockref = await mining.getTip(ctx)
|
||||||
current_block_height = self.nodes[0].getchaintips()[0]["height"]
|
current_block_height = self.nodes[0].getchaintips()[0]["height"]
|
||||||
assert blockref.result.height == current_block_height
|
assert blockref.result.height == current_block_height
|
||||||
@@ -142,6 +145,19 @@ class IPCMiningTest(BitcoinTestFramework):
|
|||||||
assert_equal(oldblockref.hash, newblockref.hash)
|
assert_equal(oldblockref.hash, newblockref.hash)
|
||||||
assert_equal(oldblockref.height, newblockref.height)
|
assert_equal(oldblockref.height, newblockref.height)
|
||||||
|
|
||||||
|
asyncio.run(capnp.run(async_routine()))
|
||||||
|
|
||||||
|
def run_block_template_test(self):
|
||||||
|
"""Test BlockTemplate interface methods."""
|
||||||
|
self.log.info("Running BlockTemplate interface test")
|
||||||
|
block_header_size = 80
|
||||||
|
timeout = 1000.0 # 1000 milliseconds
|
||||||
|
miniwallet = MiniWallet(self.nodes[0])
|
||||||
|
|
||||||
|
async def async_routine():
|
||||||
|
ctx, mining = await self.make_mining_ctx()
|
||||||
|
blockref = await mining.getTip(ctx)
|
||||||
|
|
||||||
async with AsyncExitStack() as stack:
|
async with AsyncExitStack() as stack:
|
||||||
self.log.debug("Create a template")
|
self.log.debug("Create a template")
|
||||||
opts = self.capnp_modules['mining'].BlockCreateOptions()
|
opts = self.capnp_modules['mining'].BlockCreateOptions()
|
||||||
@@ -154,7 +170,7 @@ class IPCMiningTest(BitcoinTestFramework):
|
|||||||
header = (await template.getBlockHeader(ctx)).result
|
header = (await template.getBlockHeader(ctx)).result
|
||||||
assert_equal(len(header), block_header_size)
|
assert_equal(len(header), block_header_size)
|
||||||
block = await mining_get_block(template, ctx)
|
block = await mining_get_block(template, ctx)
|
||||||
assert_equal(ser_uint256(block.hashPrevBlock), newblockref.hash)
|
assert_equal(ser_uint256(block.hashPrevBlock), blockref.result.hash)
|
||||||
assert len(block.vtx) >= 1
|
assert len(block.vtx) >= 1
|
||||||
txfees = await template.getTxFees(ctx)
|
txfees = await template.getTxFees(ctx)
|
||||||
assert_equal(len(txfees.result), 0)
|
assert_equal(len(txfees.result), 0)
|
||||||
@@ -209,8 +225,23 @@ class IPCMiningTest(BitcoinTestFramework):
|
|||||||
assert_equal(template7._has("result"), False)
|
assert_equal(template7._has("result"), False)
|
||||||
await wait_and_do(wait_for_block(), template6.interruptWait())
|
await wait_and_do(wait_for_block(), template6.interruptWait())
|
||||||
|
|
||||||
|
asyncio.run(capnp.run(async_routine()))
|
||||||
|
|
||||||
|
def run_coinbase_and_submission_test(self):
|
||||||
|
"""Test coinbase construction (getCoinbaseTx, getCoinbaseCommitment) and block submission (submitSolution)."""
|
||||||
|
self.log.info("Running coinbase construction and submission test")
|
||||||
|
|
||||||
|
async def async_routine():
|
||||||
|
ctx, mining = await self.make_mining_ctx()
|
||||||
|
|
||||||
current_block_height = self.nodes[0].getchaintips()[0]["height"]
|
current_block_height = self.nodes[0].getchaintips()[0]["height"]
|
||||||
|
miniwallet = MiniWallet(self.nodes[0])
|
||||||
|
opts = self.capnp_modules['mining'].BlockCreateOptions()
|
||||||
|
opts.useMempool = True
|
||||||
|
opts.blockReservedWeight = 4000
|
||||||
|
opts.coinbaseOutputMaxAdditionalSigops = 0
|
||||||
check_opts = self.capnp_modules['mining'].BlockCheckOptions()
|
check_opts = self.capnp_modules['mining'].BlockCheckOptions()
|
||||||
|
|
||||||
async with destroying((await mining.createNewBlock(opts)).result, ctx) as template:
|
async with destroying((await mining.createNewBlock(opts)).result, ctx) as template:
|
||||||
block = await mining_get_block(template, ctx)
|
block = await mining_get_block(template, ctx)
|
||||||
balance = miniwallet.get_balance()
|
balance = miniwallet.get_balance()
|
||||||
@@ -220,6 +251,7 @@ class IPCMiningTest(BitcoinTestFramework):
|
|||||||
block.vtx[0] = coinbase
|
block.vtx[0] = coinbase
|
||||||
block.hashMerkleRoot = block.calc_merkle_root()
|
block.hashMerkleRoot = block.calc_merkle_root()
|
||||||
original_version = block.nVersion
|
original_version = block.nVersion
|
||||||
|
|
||||||
self.log.debug("Submit a block with a bad version")
|
self.log.debug("Submit a block with a bad version")
|
||||||
block.nVersion = 0
|
block.nVersion = 0
|
||||||
block.solve()
|
block.solve()
|
||||||
@@ -273,6 +305,8 @@ class IPCMiningTest(BitcoinTestFramework):
|
|||||||
|
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
self.run_mining_interface_test()
|
self.run_mining_interface_test()
|
||||||
|
self.run_block_template_test()
|
||||||
|
self.run_coinbase_and_submission_test()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|||||||
Reference in new issue
Block a user