Skip to content

Commit cc673bc

Browse files
committed
fix(advanced hardfork test): ensure cli command is called before network is shutdown
1 parent 89a9062 commit cc673bc

File tree

2 files changed

+46
-29
lines changed

2 files changed

+46
-29
lines changed

src/app/hardfork_test/src/internal/hardfork/phases.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@ import (
1111
"time"
1212
)
1313

14+
type HFHandler func(*HardforkTest, *BlockAnalysisResult) error
15+
1416
// RunMainNetworkPhase runs the main network and validates its operation
1517
// and returns the fork config bytes and block analysis result
16-
func (t *HardforkTest) RunMainNetworkPhase(mainGenesisTs int64) ([]byte, *BlockAnalysisResult, error) {
18+
func (t *HardforkTest) RunMainNetworkPhase(mainGenesisTs int64, beforeShutdown HFHandler) (*BlockAnalysisResult, error) {
1719
// Start the main network
1820
mainNetCmd, err := t.RunMainNetwork(mainGenesisTs)
1921
if err != nil {
20-
return nil, nil, err
22+
return nil, err
2123
}
2224

2325
defer t.gracefulShutdown(mainNetCmd, "Main network")
@@ -28,44 +30,42 @@ func (t *HardforkTest) RunMainNetworkPhase(mainGenesisTs int64) ([]byte, *BlockA
2830
// Check block height at slot BestChainQueryFrom
2931
blockHeight, err := t.Client.GetHeight(t.AnyPortOfType(PORT_REST))
3032
if err != nil {
31-
return nil, nil, err
33+
return nil, err
3234
}
3335

3436
t.Logger.Info("Block height is %d at slot %d.", blockHeight, t.Config.BestChainQueryFrom)
3537

3638
// Validate slot occupancy
3739
if err := t.ValidateSlotOccupancy(0, blockHeight); err != nil {
38-
return nil, nil, err
40+
return nil, err
3941
}
4042

4143
// Analyze blocks and get genesis epoch data
4244
analysis, err := t.AnalyzeBlocks()
4345
if err != nil {
44-
return nil, nil, err
46+
return nil, err
4547
}
4648

4749
// Validate max slot
4850
if err := t.ValidateLatestOccupiedSlot(analysis.LatestOccupiedSlot); err != nil {
49-
return nil, nil, err
51+
return nil, err
5052
}
5153

5254
// Validate latest block slot
5355
if err := t.ValidateLatestNonEmptyBlockSlot(analysis.LatestNonEmptyBlock); err != nil {
54-
return nil, nil, err
56+
return nil, err
5557
}
5658

5759
// Validate no new blocks are created after chain end
5860
if err := t.ValidateNoNewBlocks(t.AnyPortOfType(PORT_REST)); err != nil {
59-
return nil, nil, err
61+
return nil, err
6062
}
6163

62-
// Extract fork config before nodes shutdown
63-
forkConfigBytes, err := t.GetForkConfig(t.AnyPortOfType(PORT_REST))
64-
if err != nil {
65-
return nil, nil, err
64+
if err := beforeShutdown(t, analysis); err != nil {
65+
return nil, err
6666
}
6767

68-
return forkConfigBytes, analysis, nil
68+
return analysis, nil
6969
}
7070

7171
type ForkData struct {
@@ -164,7 +164,7 @@ func (t *HardforkTest) LegacyForkPhase(analysis *BlockAnalysisResult, forkConfig
164164
}
165165

166166
// Uses `mina advanced generate-hardfork-config CLI`
167-
func (t *HardforkTest) AdvancedForkPhase(analysis *BlockAnalysisResult, forkConfigBytes []byte) (*ForkData, error) {
167+
func (t *HardforkTest) AdvancedForkPhase(analysis *BlockAnalysisResult) (*ForkData, error) {
168168

169169
cwd := ""
170170
var err error = nil

src/app/hardfork_test/src/internal/hardfork/test.go

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -118,31 +118,48 @@ func (t *HardforkTest) Run() error {
118118

119119
// Phase 1: Run and validate main network
120120
t.Logger.Info("Phase 1: Running main network...")
121-
forkConfigBytes, analysis, err := t.RunMainNetworkPhase(mainGenesisTs)
122-
if err != nil {
123-
return err
124-
}
121+
forkDataChan := make(chan ForkData, 1)
125122

126-
var forkData *ForkData
123+
var beforeShutdown HFHandler
127124
switch t.Config.ForkMethod {
128125
case config.Legacy:
129-
t.Logger.Info("Phase 2: Forking the legacy way...")
130126

131-
forkData, err = t.LegacyForkPhase(analysis, forkConfigBytes, mainGenesisTs)
132-
if err != nil {
133-
return err
127+
beforeShutdown = func(t *HardforkTest, analysis *BlockAnalysisResult) error {
128+
t.Logger.Info("Phase 2: Forking the legacy way...")
129+
130+
forkConfigBytes, err := t.GetForkConfig(t.AnyPortOfType(PORT_REST))
131+
if err != nil {
132+
return err
133+
}
134+
var forkData *ForkData
135+
forkData, err = t.LegacyForkPhase(analysis, forkConfigBytes, mainGenesisTs)
136+
if err != nil {
137+
return err
138+
}
139+
forkDataChan <- *forkData
140+
return nil
134141
}
135-
case config.Advanced:
136-
t.Logger.Info("Phase 2: Forking with `mina advanced generate-hardfork-config`...")
137142

138-
forkData, err = t.AdvancedForkPhase(analysis, forkConfigBytes)
139-
if err != nil {
140-
return err
143+
case config.Advanced:
144+
beforeShutdown = func(t *HardforkTest, analysis *BlockAnalysisResult) error {
145+
t.Logger.Info("Phase 2: Forking with `mina advanced generate-hardfork-config`...")
146+
147+
forkData, err := t.AdvancedForkPhase(analysis)
148+
if err != nil {
149+
return err
150+
}
151+
forkDataChan <- *forkData
152+
return nil
141153
}
142154
}
143155

156+
analysis, err := t.RunMainNetworkPhase(mainGenesisTs, beforeShutdown)
157+
if err != nil {
158+
return err
159+
}
160+
144161
t.Logger.Info("Phase 3: Running fork network...")
145-
if err := t.RunForkNetworkPhase(analysis.LatestNonEmptyBlock.BlockHeight, *forkData, mainGenesisTs); err != nil {
162+
if err := t.RunForkNetworkPhase(analysis.LatestNonEmptyBlock.BlockHeight, <-forkDataChan, mainGenesisTs); err != nil {
146163
return err
147164
}
148165

0 commit comments

Comments
 (0)