Skip to content

Commit 8cc9735

Browse files
committed
[QA] Check enabled masternode count in functional tests
1 parent a0830a7 commit 8cc9735

File tree

2 files changed

+53
-1
lines changed

2 files changed

+53
-1
lines changed

test/functional/tiertwo_deterministicmns.py

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ def check_mn_list(self, mns):
4848
self.check_mn_list_on_node(i, mns)
4949
self.log.info("Deterministic list contains %d masternodes for all peers." % len(mns))
5050

51+
def check_mn_enabled_count(self, enabled, total):
52+
for node in self.nodes:
53+
node_count = node.getmasternodecount()
54+
assert_equal(node_count['enabled'], enabled)
55+
assert_equal(node_count['total'], total)
56+
5157
def get_addr_balance(self, node, addr):
5258
rcv = node.listreceivedbyaddress(0, False, False, addr)
5359
return rcv[0]['amount'] if len(rcv) > 0 else 0
@@ -131,6 +137,9 @@ def run_test(self):
131137
# -- DIP3 enforced and SPORK_21 active here --
132138
self.wait_until_mnsync_completed()
133139

140+
# enabled/total masternodes: 0/0
141+
self.check_mn_enabled_count(0, 0)
142+
134143
# Create 3 DMNs and init the remote nodes
135144
self.log.info("Initializing masternodes...")
136145
self.add_new_dmn(mns, "internal")
@@ -142,6 +151,9 @@ def run_test(self):
142151
miner.generate(1)
143152
self.sync_blocks()
144153

154+
# enabled/total masternodes: 3/3
155+
self.check_mn_enabled_count(3, 3)
156+
145157
# Init the other 3 remote nodes before creating the ProReg tx
146158
self.log.info("Initializing more masternodes...")
147159
op_keys = []
@@ -162,6 +174,9 @@ def run_test(self):
162174
self.sync_blocks()
163175
time.sleep(1)
164176
self.log.info("Masternodes started.")
177+
178+
# enabled/total masternodes: 6/6
179+
self.check_mn_enabled_count(6, 6)
165180
self.check_mn_list(mns)
166181

167182
# Check status from remote nodes
@@ -188,6 +203,9 @@ def run_test(self):
188203
miner.generate(1)
189204
self.sync_blocks()
190205
assert_greater_than(miner.getrawtransaction(spend_txid, True)["confirmations"], 0)
206+
207+
# enabled/total masternodes: 5/5
208+
self.check_mn_enabled_count(5, 5)
191209
self.check_mn_list(mns)
192210

193211
# Register dmn again, with the collateral of dmn2
@@ -200,6 +218,9 @@ def run_test(self):
200218
outpoint=dmn2.collateral, op_addr_and_key=dmn_keys))
201219
miner.generate(1)
202220
self.sync_blocks()
221+
222+
# enabled/total masternodes: 5/5
223+
self.check_mn_enabled_count(5, 5)
203224
self.check_mn_list(mns)
204225

205226
# Now try to register dmn2 again with an already-used IP
@@ -235,6 +256,9 @@ def run_test(self):
235256
json_tx = self.nodes[dmn2c.idx].getrawtransaction(dmn2c.proTx, True)
236257
assert_greater_than(json_tx['confirmations'], 0)
237258
self.check_proreg_payload(dmn2c, json_tx)
259+
260+
# enabled/total masternodes: 6/6
261+
self.check_mn_enabled_count(6, 6)
238262
self.check_mn_list(mns) # 6 masternodes again
239263

240264
# Test payments.
@@ -317,9 +341,13 @@ def run_test(self):
317341
self.sync_mempools([miner, controller])
318342
miner.generate(1)
319343
self.sync_blocks()
320-
# Updating the operator address, clears the IP (and puts the mn in PoSe banned state)
344+
345+
# enabled/total masternodes: 5/6
346+
# Updating the operator key, clears the IP (and puts the mn in PoSe banned state)
347+
self.check_mn_enabled_count(5, 6)
321348
mns[0].ipport = "[::]:0"
322349
self.check_mn_list(mns)
350+
323351
old_mn0_balance = self.get_addr_balance(controller, mns[0].payee)
324352
self.log.info("Update operator address (with external key)...")
325353
mns[0].operator = self.nodes[mns[0].idx].getnewaddress()
@@ -328,13 +356,15 @@ def run_test(self):
328356
miner.protx_update_registrar(mns[0].proTx, mns[0].operator, "", "", ownerKey)
329357
miner.generate(1)
330358
self.sync_blocks()
359+
self.check_mn_enabled_count(5, 6) # stil not valid until new operator sends proUpServ
331360
self.check_mn_list(mns)
332361
self.log.info("Update voting address...")
333362
mns[1].voting = controller.getnewaddress()
334363
controller.protx_update_registrar(mns[1].proTx, "", mns[1].voting, "")
335364
self.sync_mempools([miner, controller])
336365
miner.generate(1)
337366
self.sync_blocks()
367+
self.check_mn_enabled_count(5, 6)
338368
self.check_mn_list(mns)
339369
self.log.info("Update payout address...")
340370
old_payee = mns[2].payee
@@ -346,6 +376,7 @@ def run_test(self):
346376
old_mn2_bal = self.get_addr_balance(controller, old_payee)
347377
miner.generate(len(mns)-1)
348378
self.sync_blocks()
379+
self.check_mn_enabled_count(5, 6)
349380
self.check_mn_list(mns)
350381
# Check payment to new address
351382
self.log.info("Checking payments...")
@@ -367,6 +398,7 @@ def run_test(self):
367398
self.sync_mempools([miner, controller])
368399
miner.generate(1)
369400
self.sync_blocks()
401+
self.check_mn_enabled_count(4, 6) # mn3 has been revoked
370402
self.check_mn_list(mns)
371403
old_mn3_bal = self.get_addr_balance(controller, mns[3].payee)
372404
self.log.info("Revoke masternode (with external key)...")
@@ -378,7 +410,11 @@ def run_test(self):
378410
old_mn4_bal = self.get_addr_balance(controller, mns[4].payee)
379411
miner.generate(len(mns) + 1)
380412
self.sync_blocks()
413+
414+
# enabled/total masternodes: 3/6 (mn0 banned, mn3 and mn4 revoked)
415+
self.check_mn_enabled_count(3, 6)
381416
self.check_mn_list(mns)
417+
382418
# Check (no) payments
383419
self.log.info("Checking payments...")
384420
assert_equal(self.get_addr_balance(controller, mns[3].payee), old_mn3_bal)
@@ -394,7 +430,11 @@ def run_test(self):
394430
miner.protx_update_service(mns[3].proTx, mns[3].ipport, "", mns[3].operator_key)
395431
miner.generate(len(mns))
396432
self.sync_blocks()
433+
434+
# enabled/total masternodes: 4/6 (mn3 is back)
435+
self.check_mn_enabled_count(4, 6)
397436
self.check_mn_list(mns)
437+
398438
self.log.info("Checking payments...")
399439
assert_equal(self.get_addr_balance(controller, mns[3].payee), old_mn3_bal + Decimal('3'))
400440

test/functional/tiertwo_mn_compatibility.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,12 @@ def check_mns_status(self, node, txhash):
6060
assert_equal(status["dmnstate"]["PoSePenalty"], 0)
6161
assert_equal(status["status"], "Ready")
6262

63+
def check_mn_enabled_count(self, enabled, total):
64+
for node in self.nodes:
65+
node_count = node.getmasternodecount()
66+
assert_equal(node_count['enabled'], enabled)
67+
assert_equal(node_count['total'], total)
68+
6369
"""
6470
Checks the block at specified height
6571
Returns the address of the mn paid (in the coinbase), and the json coinstake tx
@@ -92,6 +98,9 @@ def run_test(self):
9298
self.enable_mocktime()
9399
self.setup_3_masternodes_network()
94100

101+
# start with 3 masternodes (2 legacy + 1 DMN)
102+
self.check_mn_enabled_count(3, 3)
103+
95104
# add two more nodes to the network
96105
self.remoteDMN2 = self.nodes[self.remoteDMN2Pos]
97106
self.remoteDMN3 = self.nodes[self.remoteDMN3Pos]
@@ -124,6 +133,7 @@ def run_test(self):
124133
self.remoteDMN2.initmasternode(self.dmn2Privkey, "", True)
125134

126135
# check list and status
136+
self.check_mn_enabled_count(4, 4) # 2 legacy + 2 DMN
127137
txHashSet.add(self.proRegTx2)
128138
self.check_mn_list(self.miner, txHashSet)
129139
self.check_mns_status(self.remoteDMN2, self.proRegTx2)
@@ -156,6 +166,7 @@ def run_test(self):
156166

157167
# The legacy masternode must no longer be in the list
158168
# and the DMN must have taken its place
169+
self.check_mn_enabled_count(4, 4) # 1 legacy + 3 DMN
159170
txHashSet.remove(self.mnOneCollateral.hash)
160171
txHashSet.add(self.proRegTx3)
161172
for node in self.nodes:
@@ -170,6 +181,7 @@ def run_test(self):
170181
self.send_3_pings()
171182

172183
# the masternode list hasn't changed
184+
self.check_mn_enabled_count(4, 4)
173185
for node in self.nodes:
174186
self.check_mn_list(node, txHashSet)
175187
self.log.info("Masternode list correctly unchanged in all nodes.")

0 commit comments

Comments
 (0)