@@ -3,7 +3,7 @@ name: "Two-Way Network Split Finality Test"
33description : |
44 Splits a Kurtosis-launched devnet into two halves through the disruptoor
55 HTTP API, verifies that finality stops for two epochs, heals the split,
6- waits two more epochs, and verifies finality recovers .
6+ then polls for finality recovery for up to recoveryEpochs (default 3) .
77
88 The participant groups are computed dynamically from the assertoor client
99 pool: nodes 1..floor(N/2) form the left half, nodes floor(N/2)+1..N form
@@ -14,14 +14,14 @@ description: |
1414 (default `http://disruptoor:7700`).
1515version : 1.0.0
1616tags : [disruptoor, kurtosis, finality, network-split, consensus]
17- timeout : 45m
17+ timeout : 120m
1818config :
1919 disruptoorUrl : " http://disruptoor:7700"
2020 minClientCount : 2
2121 partitionClientTypes : ["execution", "beacon"]
2222 splitObservationEpochs : 2
23- recoveryEpochs : 2
24- recoveredMaxUnfinalizedEpochs : 3
23+ recoveryEpochs : 3
24+ recoveredMaxUnfinalizedEpochs : 6
2525tasks :
2626- name : get_consensus_specs
2727 id : get_specs
4646 - name : check_clients_are_healthy
4747 id : client_check
4848 title : " Wait for all devnet clients to be healthy"
49- timeout : 10m
49+ timeout : 20m
5050 configVars :
5151 minClientCount : " minClientCount"
5252 config :
5555- name : check_consensus_finality
5656 id : initial_finality
5757 title : " Wait for initial finality"
58- timeout : 20m
58+ timeout : 40m
5959 config :
6060 minFinalizedEpochs : 2
6161 maxUnfinalizedEpochs : 3
@@ -116,6 +116,7 @@ tasks:
116116
117117 - name : check_consensus_slot_range
118118 title : " Wait split observation epochs with the split active"
119+ timeout : 15m
119120 configVars :
120121 minSlotNumber : " | (.tasks.split_start.outputs.currentSlot | tonumber) + ((.splitObservationEpochs | tonumber) * (.tasks.get_specs.outputs.specs.SLOTS_PER_EPOCH | tonumber))"
121122
@@ -139,20 +140,9 @@ tasks:
139140 curl -fsS -X POST "${disruptoor_url}/v1/state/clear"
140141 curl -fsS "${disruptoor_url}/v1/state" | jq -e '(.partitions | length) == 0 and (.shaping | length) == 0' >/dev/null
141142
142- - name : check_consensus_slot_range
143- id : recovery_start
144- title : " Capture recovery start slot"
145- timeout : 1m
146- config : {}
147-
148- - name : check_consensus_slot_range
149- title : " Wait recovery epochs after clearing the split"
150- configVars :
151- minSlotNumber : " | (.tasks.recovery_start.outputs.currentSlot | tonumber) + ((.recoveryEpochs | tonumber) * (.tasks.get_specs.outputs.specs.SLOTS_PER_EPOCH | tonumber))"
152-
153143 - name : check_consensus_finality
154- title : " Check finality recovered "
155- timeout : 4m
144+ title : " Poll for finality recovery (succeeds as soon as unfinalized epochs drop) "
145+ timeout : 25m
156146 configVars :
157147 maxUnfinalizedEpochs : " recoveredMaxUnfinalizedEpochs"
158148
@@ -166,4 +156,6 @@ cleanupTasks:
166156 command : |
167157 set -euo pipefail
168158 disruptoor_url=$(echo "$DISRUPTOOR_URL" | jq -r .)
169- curl -fsS -X POST "${disruptoor_url}/v1/state/clear" || true
159+ if ! curl -fsS -X POST "${disruptoor_url}/v1/state/clear"; then
160+ echo "WARNING: failed to clear disruptoor state during cleanup; devnet may still be partitioned" >&2
161+ fi
0 commit comments