diff --git a/test/functional/interface_ipc_mining.py b/test/functional/interface_ipc_mining.py index 05dc75a532b..268ee91712d 100755 --- a/test/functional/interface_ipc_mining.py +++ b/test/functional/interface_ipc_mining.py @@ -165,6 +165,20 @@ class IPCMiningTest(BitcoinTestFramework): asyncio.run(capnp.run(async_routine())) + def run_negative_timeout_test(self): + """Reproduction (AR-38): a negative waitTipChanged timeout + should be treated like zero, not abort a node with runtime checks.""" + self.log.info("Running waitTipChanged negative timeout test") + + async def async_routine(): + ctx, mining = await make_mining_ctx(self) + blockref = await mining.getTip(ctx) + result = (await mining.waitTipChanged(ctx, blockref.result.hash, -1.0)).result + assert_equal(result.hash, blockref.result.hash) + + asyncio.run(capnp.run(async_routine())) + self.nodes[0].getblockcount() # node still responds + def run_early_startup_test(self): """Make sure mining.createNewBlock safely returns on early startup as soon as mining interface is available """ @@ -804,6 +818,7 @@ class IPCMiningTest(BitcoinTestFramework): self.default_block_wait_options = self.capnp_modules['mining'].BlockWaitOptions() self.default_block_wait_options.timeout = self.default_ipc_timeout self.default_block_wait_options.feeThreshold = 1 + self.run_negative_timeout_test() self.run_mining_interface_test() self.run_early_startup_test() self.run_block_template_test()