Skip to content

Commit 3fd7e76

Browse files
committed
[tests] Move deterministic address import to setup_nodes
This requires a small changes to a few tests, but means that deterministic addresses will always be imported (unless setup_nodes behaviour is explicitly overridden).
1 parent 08a57d5 commit 3fd7e76

10 files changed

+21
-42
lines changed

test/functional/feature_dbcrash.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ def skip_test_if_missing_module(self):
6969
def setup_network(self):
7070
self.add_nodes(self.num_nodes, extra_args=self.extra_args)
7171
self.start_nodes()
72+
self.import_deterministic_coinbase_privkeys()
7273
# Leave them unconnected, we'll use submitblock directly in this test
7374

7475
def restart_node(self, node_index, expected_tip):

test/functional/feature_fee_estimation.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,9 @@ def setup_network(self):
144144
# (68k weight is room enough for 120 or so transactions)
145145
# Node2 is a stingy miner, that
146146
# produces too small blocks (room for only 55 or so transactions)
147+
self.start_nodes()
148+
self.import_deterministic_coinbase_privkeys()
149+
self.stop_nodes()
147150

148151
def transact_and_mine(self, numblocks, mining_node):
149152
min_fee = Decimal("0.00001")
@@ -171,11 +174,6 @@ def transact_and_mine(self, numblocks, mining_node):
171174
newmem.append(utx)
172175
self.memutxo = newmem
173176

174-
def import_deterministic_coinbase_privkeys(self):
175-
self.start_nodes()
176-
super().import_deterministic_coinbase_privkeys()
177-
self.stop_nodes()
178-
179177
def run_test(self):
180178
self.log.info("This test is time consuming, please be patient")
181179
self.log.info("Splitting inputs so we can generate tx's")

test/functional/feature_pruning.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ def setup_network(self):
6363
def setup_nodes(self):
6464
self.add_nodes(self.num_nodes, self.extra_args)
6565
self.start_nodes()
66+
for n in self.nodes:
67+
n.importprivkey(privkey=n.get_deterministic_priv_key().key, label='coinbase', rescan=False)
6668

6769
def create_big_chain(self):
6870
# Start by creating some coinbases we can spend later

test/functional/interface_zmq.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ def setup_nodes(self):
6969
]
7070
self.add_nodes(self.num_nodes, self.extra_args)
7171
self.start_nodes()
72+
self.import_deterministic_coinbase_privkeys()
7273

7374
def run_test(self):
7475
try:

test/functional/p2p_node_network_limited.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ def disconnect_all(self):
4343
disconnect_nodes(self.nodes[1], 2)
4444

4545
def setup_network(self):
46-
super(NodeNetworkLimitedTest, self).setup_network()
47-
self.disconnect_all()
46+
self.add_nodes(self.num_nodes, self.extra_args)
47+
self.start_nodes()
4848

4949
def run_test(self):
5050
node = self.nodes[0].add_p2p_connection(P2PIgnoreInv())

test/functional/test_framework/test_framework.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,6 @@ def main(self):
168168
self.skip_test_if_missing_module()
169169
self.setup_chain()
170170
self.setup_network()
171-
self.import_deterministic_coinbase_privkeys()
172171
self.run_test()
173172
success = TestStatus.PASSED
174173
except JSONRPCException as e:
@@ -261,19 +260,17 @@ def setup_nodes(self):
261260
extra_args = self.extra_args
262261
self.add_nodes(self.num_nodes, extra_args)
263262
self.start_nodes()
263+
self.import_deterministic_coinbase_privkeys()
264264

265265
def import_deterministic_coinbase_privkeys(self):
266-
if self.setup_clean_chain:
267-
return
268-
269266
for n in self.nodes:
270267
try:
271268
n.getwalletinfo()
272269
except JSONRPCException as e:
273270
assert str(e).startswith('Method not found')
274271
continue
275272

276-
n.importprivkey(n.get_deterministic_priv_key().key)
273+
n.importprivkey(privkey=n.get_deterministic_priv_key().key, label='coinbase')
277274

278275
def run_test(self):
279276
"""Tests must override this method to define test logic"""

test/functional/test_framework/test_node.py

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -199,21 +199,6 @@ def wait_for_rpc_connection(self):
199199

200200
def generate(self, nblocks, maxtries=1000000):
201201
self.log.debug("TestNode.generate() dispatches `generate` call to `generatetoaddress`")
202-
# Try to import the node's deterministic private key. This is a no-op if the private key
203-
# has already been imported.
204-
try:
205-
self.rpc.importprivkey(privkey=self.get_deterministic_priv_key().key, label='coinbase', rescan=False)
206-
except JSONRPCException as e:
207-
# This may fail if:
208-
# - wallet is disabled ('Method not found')
209-
# - there are multiple wallets to import to ('Wallet file not specified')
210-
# - wallet is locked ('Error: Please enter the wallet passphrase with walletpassphrase first')
211-
# Just ignore those errors. We can make this tidier by importing the privkey during TestFramework.setup_nodes
212-
# TODO: tidy up deterministic privkey import.
213-
assert str(e).startswith('Method not found') or \
214-
str(e).startswith('Wallet file not specified') or \
215-
str(e).startswith('Error: Please enter the wallet passphrase with walletpassphrase first')
216-
217202
return self.generatetoaddress(nblocks=nblocks, address=self.get_deterministic_priv_key().address, maxtries=maxtries)
218203

219204
def get_wallet_rpc(self, wallet_name):

test/functional/wallet_basic.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,9 @@ def skip_test_if_missing_module(self):
2828
self.skip_if_no_wallet()
2929

3030
def setup_network(self):
31-
self.add_nodes(4)
32-
self.start_node(0)
33-
self.start_node(1)
34-
self.start_node(2)
31+
self.setup_nodes()
32+
# Only need nodes 0-2 running at start of test
33+
self.stop_node(3)
3534
connect_nodes_bi(self.nodes, 0, 1)
3635
connect_nodes_bi(self.nodes, 1, 2)
3736
connect_nodes_bi(self.nodes, 0, 2)

test/functional/wallet_import_rescan.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,16 +122,14 @@ def setup_network(self):
122122

123123
# Import keys with pruning disabled
124124
self.start_nodes(extra_args=[[]] * self.num_nodes)
125-
super().import_deterministic_coinbase_privkeys()
125+
for n in self.nodes:
126+
n.importprivkey(privkey=n.get_deterministic_priv_key().key, label='coinbase')
126127
self.stop_nodes()
127128

128129
self.start_nodes()
129130
for i in range(1, self.num_nodes):
130131
connect_nodes(self.nodes[i], 0)
131132

132-
def import_deterministic_coinbase_privkeys(self):
133-
pass
134-
135133
def run_test(self):
136134
# Create one transaction on node 0 with a unique amount for
137135
# each possible type of wallet import RPC.

test/functional/wallet_listreceivedby.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,6 @@ class ReceivedByTest(BitcoinTestFramework):
1818
def set_test_params(self):
1919
self.num_nodes = 2
2020

21-
def import_deterministic_coinbase_privkeys(self):
22-
assert_equal(0, len(self.nodes[1].listreceivedbyaddress(minconf=0, include_empty=True, include_watchonly=True)))
23-
super().import_deterministic_coinbase_privkeys()
24-
self.num_cb_reward_addresses = len(self.nodes[1].listreceivedbyaddress(minconf=0, include_empty=True, include_watchonly=True))
25-
2621
def skip_test_if_missing_module(self):
2722
self.skip_if_no_wallet()
2823

@@ -31,6 +26,9 @@ def run_test(self):
3126
self.nodes[0].generate(1)
3227
sync_blocks(self.nodes)
3328

29+
# save the number of coinbase reward addresses so far
30+
num_cb_reward_addresses = len(self.nodes[1].listreceivedbyaddress(minconf=0, include_empty=True, include_watchonly=True))
31+
3432
self.log.info("listreceivedbyaddress Test")
3533

3634
# Send from node 0 to 1
@@ -76,7 +74,7 @@ def run_test(self):
7674
assert_raises_rpc_error(-4, "address_filter parameter was invalid", self.nodes[1].listreceivedbyaddress, minconf=0, include_empty=True, include_watchonly=True, address_filter="bamboozling")
7775
# Another address receive money
7876
res = self.nodes[1].listreceivedbyaddress(0, True, True)
79-
assert_equal(len(res), 2 + self.num_cb_reward_addresses) # Right now 2 entries
77+
assert_equal(len(res), 2 + num_cb_reward_addresses) # Right now 2 entries
8078
other_addr = self.nodes[1].getnewaddress()
8179
txid2 = self.nodes[0].sendtoaddress(other_addr, 0.1)
8280
self.nodes[0].generate(1)
@@ -93,7 +91,7 @@ def run_test(self):
9391
assert_equal(len(res), 1)
9492
# Should be two entries though without filter
9593
res = self.nodes[1].listreceivedbyaddress(0, True, True)
96-
assert_equal(len(res), 3 + self.num_cb_reward_addresses) # Became 3 entries
94+
assert_equal(len(res), 3 + num_cb_reward_addresses) # Became 3 entries
9795

9896
# Not on random addr
9997
other_addr = self.nodes[0].getnewaddress() # note on node[0]! just a random addr

0 commit comments

Comments
 (0)