Skip to content

Commit d020ffa

Browse files
committed
Add wait_for_sporks_same and mine_quorum to DashTestFramework
1 parent 0cc1cf2 commit d020ffa

File tree

1 file changed

+106
-0
lines changed

1 file changed

+106
-0
lines changed

qa/rpc-tests/test_framework/test_framework.py

+106
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,112 @@ def wait_for_instantlock(self, txid, node):
375375
sleep(0.1)
376376
return locked
377377

378+
def wait_for_sporks_same(self, timeout=30):
379+
st = time()
380+
while time() < st + timeout:
381+
if self.check_sporks_same():
382+
return
383+
sleep(0.5)
384+
raise AssertionError("wait_for_sporks_same timed out")
385+
386+
def check_sporks_same(self):
387+
sporks = self.nodes[0].spork('show')
388+
for node in self.nodes[1:]:
389+
sporks2 = node.spork('show')
390+
if sporks != sporks2:
391+
return False
392+
return True
393+
394+
def wait_for_quorum_phase(self, phase, check_received_messages, check_received_messages_count, timeout=5):
395+
t = time()
396+
while time() - t < timeout:
397+
all_ok = True
398+
for mn in self.mninfo:
399+
s = mn.node.quorum("dkgstatus")["session"]["llmq_10"]
400+
if "phase" not in s:
401+
all_ok = False
402+
break
403+
if s["phase"] != phase:
404+
all_ok = False
405+
break
406+
if check_received_messages is not None:
407+
if s["receivedContributions"] < check_received_messages_count:
408+
all_ok = False
409+
break
410+
if all_ok:
411+
break
412+
sleep(0.1)
413+
414+
def wait_for_quorum_commitment(self, timeout = 5):
415+
t = time()
416+
while time() - t < timeout:
417+
all_ok = True
418+
for node in self.nodes:
419+
s = node.quorum("dkgstatus")["session"]["llmq_10"]
420+
if not s["receivedFinalCommitment"]:
421+
all_ok = False
422+
break
423+
if all_ok:
424+
break
425+
sleep(0.1)
426+
427+
def mine_quorum(self, expected_valid_count=10):
428+
quorums = self.nodes[0].quorum("list")
429+
430+
# move forward to next DKG
431+
skip_count = 24 - (self.nodes[0].getblockcount() % 24)
432+
if skip_count != 0:
433+
set_mocktime(get_mocktime() + 1)
434+
set_node_times(self.nodes, get_mocktime())
435+
self.nodes[0].generate(skip_count)
436+
437+
# Make sure all reached phase 1 (init)
438+
self.wait_for_quorum_phase(1, None, 0)
439+
set_mocktime(get_mocktime() + 1)
440+
set_node_times(self.nodes, get_mocktime())
441+
self.nodes[0].generate(2)
442+
443+
# Make sure all reached phase 2 (contribute) and received all contributions
444+
self.wait_for_quorum_phase(2, "receivedContributions", expected_valid_count)
445+
set_mocktime(get_mocktime() + 1)
446+
set_node_times(self.nodes, get_mocktime())
447+
self.nodes[0].generate(2)
448+
449+
# Make sure all reached phase 3 (complain) and received all complaints
450+
self.wait_for_quorum_phase(3, "receivedComplaints" if expected_valid_count != 0 else None, expected_valid_count)
451+
set_mocktime(get_mocktime() + 1)
452+
set_node_times(self.nodes, get_mocktime())
453+
self.nodes[0].generate(2)
454+
455+
# Make sure all reached phase 4 (justify)
456+
self.wait_for_quorum_phase(4, None, 0)
457+
set_mocktime(get_mocktime() + 1)
458+
set_node_times(self.nodes, get_mocktime())
459+
self.nodes[0].generate(2)
460+
461+
# Make sure all reached phase 5 (commit)
462+
self.wait_for_quorum_phase(5, "receivedPrematureCommitments", expected_valid_count)
463+
set_mocktime(get_mocktime() + 1)
464+
set_node_times(self.nodes, get_mocktime())
465+
self.nodes[0].generate(2)
466+
467+
# Make sure all reached phase 6 (mining)
468+
self.wait_for_quorum_phase(6, None, 0)
469+
470+
# Wait for final commitment
471+
self.wait_for_quorum_commitment()
472+
473+
# mine the final commitment
474+
set_mocktime(get_mocktime() + 1)
475+
set_node_times(self.nodes, get_mocktime())
476+
self.nodes[0].generate(1)
477+
while quorums == self.nodes[0].quorum("list"):
478+
sleep(2)
479+
set_mocktime(get_mocktime() + 1)
480+
set_node_times(self.nodes, get_mocktime())
481+
self.nodes[0].generate(1)
482+
483+
378484

379485
# Test framework for doing p2p comparison testing, which sets up some bitcoind
380486
# binaries:

0 commit comments

Comments
 (0)