[tests] Add generate method to TestNode
Adds a generate() method to the TestNode class in the test framework. This method intercepts calls to generate, imports a dewterministic private key to the node and then calls generatetoaddress to generate the block to that address. Note that repeated calls to importprivkey for the same private keys are no-ops, so it's fine to call the generate() method many times.
This commit is contained in:
parent
c269209336
commit
aab81720de
1 changed files with 19 additions and 0 deletions
|
@ -197,6 +197,25 @@ class TestNode():
|
||||||
time.sleep(1.0 / poll_per_s)
|
time.sleep(1.0 / poll_per_s)
|
||||||
self._raise_assertion_error("Unable to connect to bitcoind")
|
self._raise_assertion_error("Unable to connect to bitcoind")
|
||||||
|
|
||||||
|
def generate(self, nblocks, maxtries=1000000):
|
||||||
|
self.log.debug("TestNode.generate() dispatches `generate` call to `generatetoaddress`")
|
||||||
|
# Try to import the node's deterministic private key. This is a no-op if the private key
|
||||||
|
# has already been imported.
|
||||||
|
try:
|
||||||
|
self.rpc.importprivkey(privkey=self.get_deterministic_priv_key().key, label='coinbase', rescan=False)
|
||||||
|
except JSONRPCException as e:
|
||||||
|
# This may fail if:
|
||||||
|
# - wallet is disabled ('Method not found')
|
||||||
|
# - there are multiple wallets to import to ('Wallet file not specified')
|
||||||
|
# - wallet is locked ('Error: Please enter the wallet passphrase with walletpassphrase first')
|
||||||
|
# Just ignore those errors. We can make this tidier by importing the privkey during TestFramework.setup_nodes
|
||||||
|
# TODO: tidy up deterministic privkey import.
|
||||||
|
assert str(e).startswith('Method not found') or \
|
||||||
|
str(e).startswith('Wallet file not specified') or \
|
||||||
|
str(e).startswith('Error: Please enter the wallet passphrase with walletpassphrase first')
|
||||||
|
|
||||||
|
return self.generatetoaddress(nblocks=nblocks, address=self.get_deterministic_priv_key().address, maxtries=maxtries)
|
||||||
|
|
||||||
def get_wallet_rpc(self, wallet_name):
|
def get_wallet_rpc(self, wallet_name):
|
||||||
if self.use_cli:
|
if self.use_cli:
|
||||||
return self.cli("-rpcwallet={}".format(wallet_name))
|
return self.cli("-rpcwallet={}".format(wallet_name))
|
||||||
|
|
Loading…
Reference in a new issue