6
6
7
7
Test various backwards compatibility scenarios. Download the previous node binaries:
8
8
9
- contrib/devtools/previous_release.sh -b v0.18.1 v0.17.1
9
+ contrib/devtools/previous_release.sh -b v0.19.0.1 v0. 18.1 v0.17.1
10
10
11
11
Due to RPC changes introduced in various versions the below tests
12
12
won't work for older versions without some patches or workarounds.
30
30
class BackwardsCompatibilityTest (BitcoinTestFramework ):
31
31
def set_test_params (self ):
32
32
self .setup_clean_chain = True
33
- self .num_nodes = 4
33
+ self .num_nodes = 5
34
34
# Add new version after each release:
35
35
self .extra_args = [
36
36
["-addresstype=bech32" ], # Pre-release: use to mine blocks
37
37
["-nowallet" , "-walletrbf=1" , "-addresstype=bech32" ], # Pre-release: use to receive coins, swap wallets, etc
38
+ ["-nowallet" , "-walletrbf=1" , "-addresstype=bech32" ], # v0.19.0.1
38
39
["-nowallet" , "-walletrbf=1" , "-addresstype=bech32" ], # v0.18.1
39
40
["-nowallet" , "-walletrbf=1" , "-addresstype=bech32" ] # v0.17.1
40
41
]
@@ -52,16 +53,19 @@ def setup_nodes(self):
52
53
self .add_nodes (self .num_nodes , extra_args = self .extra_args , versions = [
53
54
None ,
54
55
None ,
56
+ 190000 ,
55
57
180100 ,
56
58
170100
57
59
], binary = [
58
60
self .options .bitcoind ,
59
61
self .options .bitcoind ,
62
+ releases_path + "/v0.19.0.1/bin/bitcoind" ,
60
63
releases_path + "/v0.18.1/bin/bitcoind" ,
61
64
releases_path + "/v0.17.1/bin/bitcoind"
62
65
], binary_cli = [
63
66
self .options .bitcoincli ,
64
67
self .options .bitcoincli ,
68
+ releases_path + "/v0.19.0.1/bin/bitcoin-cli" ,
65
69
releases_path + "/v0.18.1/bin/bitcoin-cli" ,
66
70
releases_path + "/v0.17.1/bin/bitcoin-cli"
67
71
])
@@ -77,7 +81,8 @@ def run_test(self):
77
81
res = self .nodes [self .num_nodes - 1 ].getblockchaininfo ()
78
82
assert_equal (res ['blocks' ], 101 )
79
83
80
- node_master = self .nodes [self .num_nodes - 3 ]
84
+ node_master = self .nodes [self .num_nodes - 4 ]
85
+ node_v19 = self .nodes [self .num_nodes - 3 ]
81
86
node_v18 = self .nodes [self .num_nodes - 2 ]
82
87
node_v17 = self .nodes [self .num_nodes - 1 ]
83
88
@@ -111,6 +116,13 @@ def run_test(self):
111
116
# Abondon transaction, but don't confirm
112
117
self .nodes [1 ].abandontransaction (tx3_id )
113
118
119
+ # w1_v19: regular wallet, created with v0.19
120
+ node_v19 .createwallet (wallet_name = "w1_v19" )
121
+ wallet = node_v19 .get_wallet_rpc ("w1_v19" )
122
+ info = wallet .getwalletinfo ()
123
+ assert info ['private_keys_enabled' ]
124
+ assert info ['keypoolsize' ] > 0
125
+
114
126
# w1_v18: regular wallet, created with v0.18
115
127
node_v18 .createwallet (wallet_name = "w1_v18" )
116
128
wallet = node_v18 .get_wallet_rpc ("w1_v18" )
@@ -127,6 +139,13 @@ def run_test(self):
127
139
assert info ['private_keys_enabled' ] == False
128
140
assert info ['keypoolsize' ] == 0
129
141
142
+ # w2_v19: wallet with private keys disabled, created with v0.19
143
+ node_v19 .createwallet (wallet_name = "w2_v19" , disable_private_keys = True )
144
+ wallet = node_v19 .get_wallet_rpc ("w2_v19" )
145
+ info = wallet .getwalletinfo ()
146
+ assert info ['private_keys_enabled' ] == False
147
+ assert info ['keypoolsize' ] == 0
148
+
130
149
# w2_v18: wallet with private keys disabled, created with v0.18
131
150
node_v18 .createwallet (wallet_name = "w2_v18" , disable_private_keys = True )
132
151
wallet = node_v18 .get_wallet_rpc ("w2_v18" )
@@ -142,6 +161,13 @@ def run_test(self):
142
161
assert info ['private_keys_enabled' ]
143
162
assert info ['keypoolsize' ] == 0
144
163
164
+ # w3_v19: blank wallet, created with v0.19
165
+ node_v19 .createwallet (wallet_name = "w3_v19" , blank = True )
166
+ wallet = node_v19 .get_wallet_rpc ("w3_v19" )
167
+ info = wallet .getwalletinfo ()
168
+ assert info ['private_keys_enabled' ]
169
+ assert info ['keypoolsize' ] == 0
170
+
145
171
# w3_v18: blank wallet, created with v0.18
146
172
node_v18 .createwallet (wallet_name = "w3_v18" , blank = True )
147
173
wallet = node_v18 .get_wallet_rpc ("w3_v18" )
@@ -151,10 +177,13 @@ def run_test(self):
151
177
152
178
# Copy the wallets to older nodes:
153
179
node_master_wallets_dir = os .path .join (node_master .datadir , "regtest/wallets" )
180
+ node_v19_wallets_dir = os .path .join (node_v19 .datadir , "regtest/wallets" )
154
181
node_v18_wallets_dir = os .path .join (node_v18 .datadir , "regtest/wallets" )
155
182
node_v17_wallets_dir = os .path .join (node_v17 .datadir , "regtest/wallets" )
156
183
node_master .unloadwallet ("w1" )
157
184
node_master .unloadwallet ("w2" )
185
+ node_v19 .unloadwallet ("w1_v19" )
186
+ node_v19 .unloadwallet ("w2_v19" )
158
187
node_v18 .unloadwallet ("w1_v18" )
159
188
node_v18 .unloadwallet ("w2_v18" )
160
189
@@ -177,6 +206,44 @@ def run_test(self):
177
206
os .path .join (node_v18_wallets_dir , wallet )
178
207
)
179
208
209
+ # Copy wallets to v0.19
210
+ for wallet in os .listdir (node_master_wallets_dir ):
211
+ shutil .copytree (
212
+ os .path .join (node_master_wallets_dir , wallet ),
213
+ os .path .join (node_v19_wallets_dir , wallet )
214
+ )
215
+
216
+ # Open the wallets in v0.19
217
+ node_v19 .loadwallet ("w1" )
218
+ wallet = node_v19 .get_wallet_rpc ("w1" )
219
+ info = wallet .getwalletinfo ()
220
+ assert info ['private_keys_enabled' ]
221
+ assert info ['keypoolsize' ] > 0
222
+ txs = wallet .listtransactions ()
223
+ assert_equal (len (txs ), 5 )
224
+ assert_equal (txs [1 ]["txid" ], tx1_id )
225
+ assert_equal (txs [2 ]["walletconflicts" ], [tx1_id ])
226
+ assert_equal (txs [1 ]["replaced_by_txid" ], tx2_id )
227
+ assert not (txs [1 ]["abandoned" ])
228
+ assert_equal (txs [1 ]["confirmations" ], - 1 )
229
+ assert_equal (txs [2 ]["blockindex" ], 1 )
230
+ assert txs [3 ]["abandoned" ]
231
+ assert_equal (txs [4 ]["walletconflicts" ], [tx3_id ])
232
+ assert_equal (txs [3 ]["replaced_by_txid" ], tx4_id )
233
+ assert not (hasattr (txs [3 ], "blockindex" ))
234
+
235
+ node_v19 .loadwallet ("w2" )
236
+ wallet = node_v19 .get_wallet_rpc ("w2" )
237
+ info = wallet .getwalletinfo ()
238
+ assert info ['private_keys_enabled' ] == False
239
+ assert info ['keypoolsize' ] == 0
240
+
241
+ node_v19 .loadwallet ("w3" )
242
+ wallet = node_v19 .get_wallet_rpc ("w3" )
243
+ info = wallet .getwalletinfo ()
244
+ assert info ['private_keys_enabled' ]
245
+ assert info ['keypoolsize' ] == 0
246
+
180
247
# Open the wallets in v0.18
181
248
node_v18 .loadwallet ("w1" )
182
249
wallet = node_v18 .get_wallet_rpc ("w1" )
0 commit comments