Commit 4f43bd96 authored by zhiqiangxu's avatar zhiqiangxu Committed by GitHub

op-challenger: fail immediately if `VmBin` and `Server` don't exist (#13588)

* ensure VmBin and Server exist

* only check when not in test

* test file exists

* reuse TempDir()

* add tests for new errors

* address comments
parent 38aa19f3
...@@ -4,6 +4,7 @@ import ( ...@@ -4,6 +4,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"net/url" "net/url"
"os"
"runtime" "runtime"
"slices" "slices"
"strconv" "strconv"
...@@ -216,6 +217,14 @@ func (c Config) Check() error { ...@@ -216,6 +217,14 @@ func (c Config) Check() error {
if c.Cannon.Server == "" { if c.Cannon.Server == "" {
return ErrMissingCannonServer return ErrMissingCannonServer
} }
if _, err := os.Stat(c.Cannon.VmBin); err != nil {
return fmt.Errorf("%w: %w", ErrMissingCannonBin, err)
}
if _, err := os.Stat(c.Cannon.Server); err != nil {
return fmt.Errorf("%w: %w", ErrMissingCannonServer, err)
}
if c.Cannon.Network == "" { if c.Cannon.Network == "" {
if c.Cannon.RollupConfigPath == "" { if c.Cannon.RollupConfigPath == "" {
return ErrMissingCannonRollupConfig return ErrMissingCannonRollupConfig
...@@ -254,6 +263,14 @@ func (c Config) Check() error { ...@@ -254,6 +263,14 @@ func (c Config) Check() error {
if c.Asterisc.Server == "" { if c.Asterisc.Server == "" {
return ErrMissingAsteriscServer return ErrMissingAsteriscServer
} }
if _, err := os.Stat(c.Asterisc.VmBin); err != nil {
return fmt.Errorf("%w: %w", ErrMissingAsteriscBin, err)
}
if _, err := os.Stat(c.Asterisc.Server); err != nil {
return fmt.Errorf("%w: %w", ErrMissingAsteriscServer, err)
}
if c.Asterisc.Network == "" { if c.Asterisc.Network == "" {
if c.Asterisc.RollupConfigPath == "" { if c.Asterisc.RollupConfigPath == "" {
return ErrMissingAsteriscRollupConfig return ErrMissingAsteriscRollupConfig
...@@ -289,6 +306,14 @@ func (c Config) Check() error { ...@@ -289,6 +306,14 @@ func (c Config) Check() error {
if c.AsteriscKona.Server == "" { if c.AsteriscKona.Server == "" {
return ErrMissingAsteriscKonaServer return ErrMissingAsteriscKonaServer
} }
if _, err := os.Stat(c.AsteriscKona.VmBin); err != nil {
return fmt.Errorf("%w: %w", ErrMissingAsteriscKonaBin, err)
}
if _, err := os.Stat(c.AsteriscKona.Server); err != nil {
return fmt.Errorf("%w: %w", ErrMissingAsteriscKonaServer, err)
}
if c.AsteriscKona.Network == "" { if c.AsteriscKona.Network == "" {
if c.AsteriscKona.RollupConfigPath == "" { if c.AsteriscKona.RollupConfigPath == "" {
return ErrMissingAsteriscKonaRollupConfig return ErrMissingAsteriscKonaRollupConfig
......
...@@ -3,6 +3,8 @@ package config ...@@ -3,6 +3,8 @@ package config
import ( import (
"fmt" "fmt"
"net/url" "net/url"
"os"
"path/filepath"
"runtime" "runtime"
"testing" "testing"
...@@ -32,6 +34,7 @@ var ( ...@@ -32,6 +34,7 @@ var (
validAsteriscAbsolutePreState = "pre.json" validAsteriscAbsolutePreState = "pre.json"
validAsteriscAbsolutePreStateBaseURL, _ = url.Parse("http://localhost/bar/") validAsteriscAbsolutePreStateBaseURL, _ = url.Parse("http://localhost/bar/")
nonExistingFile = "path/to/nonexistent/file"
validAsteriscKonaBin = "./bin/asterisc" validAsteriscKonaBin = "./bin/asterisc"
validAsteriscKonaServerBin = "./bin/kona-host" validAsteriscKonaServerBin = "./bin/kona-host"
validAsteriscKonaNetwork = "mainnet" validAsteriscKonaNetwork = "mainnet"
...@@ -43,37 +46,75 @@ var cannonTraceTypes = []types.TraceType{types.TraceTypeCannon, types.TraceTypeP ...@@ -43,37 +46,75 @@ var cannonTraceTypes = []types.TraceType{types.TraceTypeCannon, types.TraceTypeP
var asteriscTraceTypes = []types.TraceType{types.TraceTypeAsterisc} var asteriscTraceTypes = []types.TraceType{types.TraceTypeAsterisc}
var asteriscKonaTraceTypes = []types.TraceType{types.TraceTypeAsteriscKona} var asteriscKonaTraceTypes = []types.TraceType{types.TraceTypeAsteriscKona}
func applyValidConfigForCannon(cfg *Config) { func ensureExists(path string) error {
cfg.Cannon.VmBin = validCannonBin _, err := os.Stat(path)
cfg.Cannon.Server = validCannonOpProgramBin if err == nil {
return nil
}
err = os.MkdirAll(filepath.Dir(path), os.ModePerm)
if err != nil {
return err
}
file, err := os.Create(path)
if err != nil {
return err
}
return file.Close()
}
func applyValidConfigForCannon(t *testing.T, cfg *Config) {
tmpDir := t.TempDir()
vmBin := filepath.Join(tmpDir, validCannonBin)
server := filepath.Join(tmpDir, validCannonOpProgramBin)
err := ensureExists(vmBin)
require.NoError(t, err)
err = ensureExists(server)
require.NoError(t, err)
cfg.Cannon.VmBin = vmBin
cfg.Cannon.Server = server
cfg.CannonAbsolutePreStateBaseURL = validCannonAbsolutePreStateBaseURL cfg.CannonAbsolutePreStateBaseURL = validCannonAbsolutePreStateBaseURL
cfg.Cannon.Network = validCannonNetwork cfg.Cannon.Network = validCannonNetwork
} }
func applyValidConfigForAsterisc(cfg *Config) { func applyValidConfigForAsterisc(t *testing.T, cfg *Config) {
cfg.Asterisc.VmBin = validAsteriscBin tmpDir := t.TempDir()
cfg.Asterisc.Server = validAsteriscOpProgramBin vmBin := filepath.Join(tmpDir, validAsteriscBin)
server := filepath.Join(tmpDir, validAsteriscOpProgramBin)
err := ensureExists(vmBin)
require.NoError(t, err)
err = ensureExists(server)
require.NoError(t, err)
cfg.Asterisc.VmBin = vmBin
cfg.Asterisc.Server = server
cfg.AsteriscAbsolutePreStateBaseURL = validAsteriscAbsolutePreStateBaseURL cfg.AsteriscAbsolutePreStateBaseURL = validAsteriscAbsolutePreStateBaseURL
cfg.Asterisc.Network = validAsteriscNetwork cfg.Asterisc.Network = validAsteriscNetwork
} }
func applyValidConfigForAsteriscKona(cfg *Config) { func applyValidConfigForAsteriscKona(t *testing.T, cfg *Config) {
cfg.AsteriscKona.VmBin = validAsteriscKonaBin tmpDir := t.TempDir()
cfg.AsteriscKona.Server = validAsteriscKonaServerBin vmBin := filepath.Join(tmpDir, validAsteriscKonaBin)
server := filepath.Join(tmpDir, validAsteriscKonaServerBin)
err := ensureExists(vmBin)
require.NoError(t, err)
err = ensureExists(server)
require.NoError(t, err)
cfg.AsteriscKona.VmBin = vmBin
cfg.AsteriscKona.Server = server
cfg.AsteriscKonaAbsolutePreStateBaseURL = validAsteriscKonaAbsolutePreStateBaseURL cfg.AsteriscKonaAbsolutePreStateBaseURL = validAsteriscKonaAbsolutePreStateBaseURL
cfg.AsteriscKona.Network = validAsteriscKonaNetwork cfg.AsteriscKona.Network = validAsteriscKonaNetwork
} }
func validConfig(traceType types.TraceType) Config { func validConfig(t *testing.T, traceType types.TraceType) Config {
cfg := NewConfig(validGameFactoryAddress, validL1EthRpc, validL1BeaconUrl, validRollupRpc, validL2Rpc, validDatadir, traceType) cfg := NewConfig(validGameFactoryAddress, validL1EthRpc, validL1BeaconUrl, validRollupRpc, validL2Rpc, validDatadir, traceType)
if traceType == types.TraceTypeCannon || traceType == types.TraceTypePermissioned { if traceType == types.TraceTypeCannon || traceType == types.TraceTypePermissioned {
applyValidConfigForCannon(&cfg) applyValidConfigForCannon(t, &cfg)
} }
if traceType == types.TraceTypeAsterisc { if traceType == types.TraceTypeAsterisc {
applyValidConfigForAsterisc(&cfg) applyValidConfigForAsterisc(t, &cfg)
} }
if traceType == types.TraceTypeAsteriscKona { if traceType == types.TraceTypeAsteriscKona {
applyValidConfigForAsteriscKona(&cfg) applyValidConfigForAsteriscKona(t, &cfg)
} }
return cfg return cfg
} }
...@@ -83,7 +124,7 @@ func TestValidConfigIsValid(t *testing.T) { ...@@ -83,7 +124,7 @@ func TestValidConfigIsValid(t *testing.T) {
for _, traceType := range types.TraceTypes { for _, traceType := range types.TraceTypes {
traceType := traceType traceType := traceType
t.Run(traceType.String(), func(t *testing.T) { t.Run(traceType.String(), func(t *testing.T) {
err := validConfig(traceType).Check() err := validConfig(t, traceType).Check()
require.NoError(t, err) require.NoError(t, err)
}) })
} }
...@@ -91,38 +132,38 @@ func TestValidConfigIsValid(t *testing.T) { ...@@ -91,38 +132,38 @@ func TestValidConfigIsValid(t *testing.T) {
func TestTxMgrConfig(t *testing.T) { func TestTxMgrConfig(t *testing.T) {
t.Run("Invalid", func(t *testing.T) { t.Run("Invalid", func(t *testing.T) {
config := validConfig(types.TraceTypeCannon) config := validConfig(t, types.TraceTypeCannon)
config.TxMgrConfig = txmgr.CLIConfig{} config.TxMgrConfig = txmgr.CLIConfig{}
require.Equal(t, config.Check().Error(), "must provide a L1 RPC url") require.Equal(t, config.Check().Error(), "must provide a L1 RPC url")
}) })
} }
func TestL1EthRpcRequired(t *testing.T) { func TestL1EthRpcRequired(t *testing.T) {
config := validConfig(types.TraceTypeCannon) config := validConfig(t, types.TraceTypeCannon)
config.L1EthRpc = "" config.L1EthRpc = ""
require.ErrorIs(t, config.Check(), ErrMissingL1EthRPC) require.ErrorIs(t, config.Check(), ErrMissingL1EthRPC)
} }
func TestL1BeaconRequired(t *testing.T) { func TestL1BeaconRequired(t *testing.T) {
config := validConfig(types.TraceTypeCannon) config := validConfig(t, types.TraceTypeCannon)
config.L1Beacon = "" config.L1Beacon = ""
require.ErrorIs(t, config.Check(), ErrMissingL1Beacon) require.ErrorIs(t, config.Check(), ErrMissingL1Beacon)
} }
func TestGameFactoryAddressRequired(t *testing.T) { func TestGameFactoryAddressRequired(t *testing.T) {
config := validConfig(types.TraceTypeCannon) config := validConfig(t, types.TraceTypeCannon)
config.GameFactoryAddress = common.Address{} config.GameFactoryAddress = common.Address{}
require.ErrorIs(t, config.Check(), ErrMissingGameFactoryAddress) require.ErrorIs(t, config.Check(), ErrMissingGameFactoryAddress)
} }
func TestSelectiveClaimResolutionNotRequired(t *testing.T) { func TestSelectiveClaimResolutionNotRequired(t *testing.T) {
config := validConfig(types.TraceTypeCannon) config := validConfig(t, types.TraceTypeCannon)
require.Equal(t, false, config.SelectiveClaimResolution) require.Equal(t, false, config.SelectiveClaimResolution)
require.NoError(t, config.Check()) require.NoError(t, config.Check())
} }
func TestGameAllowlistNotRequired(t *testing.T) { func TestGameAllowlistNotRequired(t *testing.T) {
config := validConfig(types.TraceTypeCannon) config := validConfig(t, types.TraceTypeCannon)
config.GameAllowlist = []common.Address{} config.GameAllowlist = []common.Address{}
require.NoError(t, config.Check()) require.NoError(t, config.Check())
} }
...@@ -132,33 +173,33 @@ func TestCannonRequiredArgs(t *testing.T) { ...@@ -132,33 +173,33 @@ func TestCannonRequiredArgs(t *testing.T) {
traceType := traceType traceType := traceType
t.Run(fmt.Sprintf("TestCannonBinRequired-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestCannonBinRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType) config := validConfig(t, traceType)
config.Cannon.VmBin = "" config.Cannon.VmBin = ""
require.ErrorIs(t, config.Check(), ErrMissingCannonBin) require.ErrorIs(t, config.Check(), ErrMissingCannonBin)
}) })
t.Run(fmt.Sprintf("TestCannonServerRequired-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestCannonServerRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType) config := validConfig(t, traceType)
config.Cannon.Server = "" config.Cannon.Server = ""
require.ErrorIs(t, config.Check(), ErrMissingCannonServer) require.ErrorIs(t, config.Check(), ErrMissingCannonServer)
}) })
t.Run(fmt.Sprintf("TestCannonAbsolutePreStateOrBaseURLRequired-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestCannonAbsolutePreStateOrBaseURLRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType) config := validConfig(t, traceType)
config.CannonAbsolutePreState = "" config.CannonAbsolutePreState = ""
config.CannonAbsolutePreStateBaseURL = nil config.CannonAbsolutePreStateBaseURL = nil
require.ErrorIs(t, config.Check(), ErrMissingCannonAbsolutePreState) require.ErrorIs(t, config.Check(), ErrMissingCannonAbsolutePreState)
}) })
t.Run(fmt.Sprintf("TestCannonAbsolutePreState-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestCannonAbsolutePreState-%v", traceType), func(t *testing.T) {
config := validConfig(traceType) config := validConfig(t, traceType)
config.CannonAbsolutePreState = validCannonAbsolutePreState config.CannonAbsolutePreState = validCannonAbsolutePreState
config.CannonAbsolutePreStateBaseURL = nil config.CannonAbsolutePreStateBaseURL = nil
require.NoError(t, config.Check()) require.NoError(t, config.Check())
}) })
t.Run(fmt.Sprintf("TestCannonAbsolutePreStateBaseURL-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestCannonAbsolutePreStateBaseURL-%v", traceType), func(t *testing.T) {
config := validConfig(traceType) config := validConfig(t, traceType)
config.CannonAbsolutePreState = "" config.CannonAbsolutePreState = ""
config.CannonAbsolutePreStateBaseURL = validCannonAbsolutePreStateBaseURL config.CannonAbsolutePreStateBaseURL = validCannonAbsolutePreStateBaseURL
require.NoError(t, config.Check()) require.NoError(t, config.Check())
...@@ -166,21 +207,21 @@ func TestCannonRequiredArgs(t *testing.T) { ...@@ -166,21 +207,21 @@ func TestCannonRequiredArgs(t *testing.T) {
t.Run(fmt.Sprintf("TestAllowSupplyingBothCannonAbsolutePreStateAndBaseURL-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAllowSupplyingBothCannonAbsolutePreStateAndBaseURL-%v", traceType), func(t *testing.T) {
// Since the prestate baseURL might be inherited from the --prestate-urls option, allow overriding it with a specific prestate // Since the prestate baseURL might be inherited from the --prestate-urls option, allow overriding it with a specific prestate
config := validConfig(traceType) config := validConfig(t, traceType)
config.CannonAbsolutePreState = validCannonAbsolutePreState config.CannonAbsolutePreState = validCannonAbsolutePreState
config.CannonAbsolutePreStateBaseURL = validCannonAbsolutePreStateBaseURL config.CannonAbsolutePreStateBaseURL = validCannonAbsolutePreStateBaseURL
require.NoError(t, config.Check()) require.NoError(t, config.Check())
}) })
t.Run(fmt.Sprintf("TestL2RpcRequired-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestL2RpcRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType) config := validConfig(t, traceType)
config.L2Rpc = "" config.L2Rpc = ""
require.ErrorIs(t, config.Check(), ErrMissingL2Rpc) require.ErrorIs(t, config.Check(), ErrMissingL2Rpc)
}) })
t.Run(fmt.Sprintf("TestCannonSnapshotFreq-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestCannonSnapshotFreq-%v", traceType), func(t *testing.T) {
t.Run("MustNotBeZero", func(t *testing.T) { t.Run("MustNotBeZero", func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.Cannon.SnapshotFreq = 0 cfg.Cannon.SnapshotFreq = 0
require.ErrorIs(t, cfg.Check(), ErrMissingCannonSnapshotFreq) require.ErrorIs(t, cfg.Check(), ErrMissingCannonSnapshotFreq)
}) })
...@@ -188,14 +229,14 @@ func TestCannonRequiredArgs(t *testing.T) { ...@@ -188,14 +229,14 @@ func TestCannonRequiredArgs(t *testing.T) {
t.Run(fmt.Sprintf("TestCannonInfoFreq-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestCannonInfoFreq-%v", traceType), func(t *testing.T) {
t.Run("MustNotBeZero", func(t *testing.T) { t.Run("MustNotBeZero", func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.Cannon.InfoFreq = 0 cfg.Cannon.InfoFreq = 0
require.ErrorIs(t, cfg.Check(), ErrMissingCannonInfoFreq) require.ErrorIs(t, cfg.Check(), ErrMissingCannonInfoFreq)
}) })
}) })
t.Run(fmt.Sprintf("TestCannonNetworkOrRollupConfigRequired-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestCannonNetworkOrRollupConfigRequired-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.Cannon.Network = "" cfg.Cannon.Network = ""
cfg.Cannon.RollupConfigPath = "" cfg.Cannon.RollupConfigPath = ""
cfg.Cannon.L2GenesisPath = "genesis.json" cfg.Cannon.L2GenesisPath = "genesis.json"
...@@ -203,7 +244,7 @@ func TestCannonRequiredArgs(t *testing.T) { ...@@ -203,7 +244,7 @@ func TestCannonRequiredArgs(t *testing.T) {
}) })
t.Run(fmt.Sprintf("TestCannonNetworkOrL2GenesisRequired-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestCannonNetworkOrL2GenesisRequired-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.Cannon.Network = "" cfg.Cannon.Network = ""
cfg.Cannon.RollupConfigPath = "foo.json" cfg.Cannon.RollupConfigPath = "foo.json"
cfg.Cannon.L2GenesisPath = "" cfg.Cannon.L2GenesisPath = ""
...@@ -211,7 +252,7 @@ func TestCannonRequiredArgs(t *testing.T) { ...@@ -211,7 +252,7 @@ func TestCannonRequiredArgs(t *testing.T) {
}) })
t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndRollup-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndRollup-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.Cannon.Network = validCannonNetwork cfg.Cannon.Network = validCannonNetwork
cfg.Cannon.RollupConfigPath = "foo.json" cfg.Cannon.RollupConfigPath = "foo.json"
cfg.Cannon.L2GenesisPath = "" cfg.Cannon.L2GenesisPath = ""
...@@ -219,7 +260,7 @@ func TestCannonRequiredArgs(t *testing.T) { ...@@ -219,7 +260,7 @@ func TestCannonRequiredArgs(t *testing.T) {
}) })
t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndL2Genesis-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndL2Genesis-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.Cannon.Network = validCannonNetwork cfg.Cannon.Network = validCannonNetwork
cfg.Cannon.RollupConfigPath = "" cfg.Cannon.RollupConfigPath = ""
cfg.Cannon.L2GenesisPath = "foo.json" cfg.Cannon.L2GenesisPath = "foo.json"
...@@ -227,27 +268,39 @@ func TestCannonRequiredArgs(t *testing.T) { ...@@ -227,27 +268,39 @@ func TestCannonRequiredArgs(t *testing.T) {
}) })
t.Run(fmt.Sprintf("TestNetworkMustBeValid-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestNetworkMustBeValid-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.Cannon.Network = "unknown" cfg.Cannon.Network = "unknown"
require.ErrorIs(t, cfg.Check(), ErrCannonNetworkUnknown) require.ErrorIs(t, cfg.Check(), ErrCannonNetworkUnknown)
}) })
t.Run(fmt.Sprintf("TestNetworkMayBeAnyChainID-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestNetworkMayBeAnyChainID-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.Cannon.Network = "467294" cfg.Cannon.Network = "467294"
require.NoError(t, cfg.Check()) require.NoError(t, cfg.Check())
}) })
t.Run(fmt.Sprintf("TestNetworkInvalidWhenNotEntirelyNumeric-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestNetworkInvalidWhenNotEntirelyNumeric-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.Cannon.Network = "467294a" cfg.Cannon.Network = "467294a"
require.ErrorIs(t, cfg.Check(), ErrCannonNetworkUnknown) require.ErrorIs(t, cfg.Check(), ErrCannonNetworkUnknown)
}) })
t.Run(fmt.Sprintf("TestDebugInfoEnabled-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestDebugInfoEnabled-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
require.True(t, cfg.Cannon.DebugInfo) require.True(t, cfg.Cannon.DebugInfo)
}) })
t.Run(fmt.Sprintf("TestVMBinExists-%v", traceType), func(t *testing.T) {
cfg := validConfig(t, traceType)
cfg.Cannon.VmBin = nonExistingFile
require.ErrorIs(t, cfg.Check(), ErrMissingCannonBin)
})
t.Run(fmt.Sprintf("TestServerExists-%v", traceType), func(t *testing.T) {
cfg := validConfig(t, traceType)
cfg.Cannon.Server = nonExistingFile
require.ErrorIs(t, cfg.Check(), ErrMissingCannonServer)
})
} }
} }
...@@ -256,33 +309,33 @@ func TestAsteriscRequiredArgs(t *testing.T) { ...@@ -256,33 +309,33 @@ func TestAsteriscRequiredArgs(t *testing.T) {
traceType := traceType traceType := traceType
t.Run(fmt.Sprintf("TestAsteriscBinRequired-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscBinRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType) config := validConfig(t, traceType)
config.Asterisc.VmBin = "" config.Asterisc.VmBin = ""
require.ErrorIs(t, config.Check(), ErrMissingAsteriscBin) require.ErrorIs(t, config.Check(), ErrMissingAsteriscBin)
}) })
t.Run(fmt.Sprintf("TestAsteriscServerRequired-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscServerRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType) config := validConfig(t, traceType)
config.Asterisc.Server = "" config.Asterisc.Server = ""
require.ErrorIs(t, config.Check(), ErrMissingAsteriscServer) require.ErrorIs(t, config.Check(), ErrMissingAsteriscServer)
}) })
t.Run(fmt.Sprintf("TestAsteriscAbsolutePreStateOrBaseURLRequired-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscAbsolutePreStateOrBaseURLRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType) config := validConfig(t, traceType)
config.AsteriscAbsolutePreState = "" config.AsteriscAbsolutePreState = ""
config.AsteriscAbsolutePreStateBaseURL = nil config.AsteriscAbsolutePreStateBaseURL = nil
require.ErrorIs(t, config.Check(), ErrMissingAsteriscAbsolutePreState) require.ErrorIs(t, config.Check(), ErrMissingAsteriscAbsolutePreState)
}) })
t.Run(fmt.Sprintf("TestAsteriscAbsolutePreState-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscAbsolutePreState-%v", traceType), func(t *testing.T) {
config := validConfig(traceType) config := validConfig(t, traceType)
config.AsteriscAbsolutePreState = validAsteriscAbsolutePreState config.AsteriscAbsolutePreState = validAsteriscAbsolutePreState
config.AsteriscAbsolutePreStateBaseURL = nil config.AsteriscAbsolutePreStateBaseURL = nil
require.NoError(t, config.Check()) require.NoError(t, config.Check())
}) })
t.Run(fmt.Sprintf("TestAsteriscAbsolutePreStateBaseURL-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscAbsolutePreStateBaseURL-%v", traceType), func(t *testing.T) {
config := validConfig(traceType) config := validConfig(t, traceType)
config.AsteriscAbsolutePreState = "" config.AsteriscAbsolutePreState = ""
config.AsteriscAbsolutePreStateBaseURL = validAsteriscAbsolutePreStateBaseURL config.AsteriscAbsolutePreStateBaseURL = validAsteriscAbsolutePreStateBaseURL
require.NoError(t, config.Check()) require.NoError(t, config.Check())
...@@ -290,21 +343,21 @@ func TestAsteriscRequiredArgs(t *testing.T) { ...@@ -290,21 +343,21 @@ func TestAsteriscRequiredArgs(t *testing.T) {
t.Run(fmt.Sprintf("TestAllowSupplingBothAsteriscAbsolutePreStateAndBaseURL-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAllowSupplingBothAsteriscAbsolutePreStateAndBaseURL-%v", traceType), func(t *testing.T) {
// Since the prestate base URL might be inherited from the --prestate-urls option, allow overriding it with a specific prestate // Since the prestate base URL might be inherited from the --prestate-urls option, allow overriding it with a specific prestate
config := validConfig(traceType) config := validConfig(t, traceType)
config.AsteriscAbsolutePreState = validAsteriscAbsolutePreState config.AsteriscAbsolutePreState = validAsteriscAbsolutePreState
config.AsteriscAbsolutePreStateBaseURL = validAsteriscAbsolutePreStateBaseURL config.AsteriscAbsolutePreStateBaseURL = validAsteriscAbsolutePreStateBaseURL
require.NoError(t, config.Check()) require.NoError(t, config.Check())
}) })
t.Run(fmt.Sprintf("TestL2RpcRequired-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestL2RpcRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType) config := validConfig(t, traceType)
config.L2Rpc = "" config.L2Rpc = ""
require.ErrorIs(t, config.Check(), ErrMissingL2Rpc) require.ErrorIs(t, config.Check(), ErrMissingL2Rpc)
}) })
t.Run(fmt.Sprintf("TestAsteriscSnapshotFreq-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscSnapshotFreq-%v", traceType), func(t *testing.T) {
t.Run("MustNotBeZero", func(t *testing.T) { t.Run("MustNotBeZero", func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.Asterisc.SnapshotFreq = 0 cfg.Asterisc.SnapshotFreq = 0
require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscSnapshotFreq) require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscSnapshotFreq)
}) })
...@@ -312,14 +365,14 @@ func TestAsteriscRequiredArgs(t *testing.T) { ...@@ -312,14 +365,14 @@ func TestAsteriscRequiredArgs(t *testing.T) {
t.Run(fmt.Sprintf("TestAsteriscInfoFreq-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscInfoFreq-%v", traceType), func(t *testing.T) {
t.Run("MustNotBeZero", func(t *testing.T) { t.Run("MustNotBeZero", func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.Asterisc.InfoFreq = 0 cfg.Asterisc.InfoFreq = 0
require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscInfoFreq) require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscInfoFreq)
}) })
}) })
t.Run(fmt.Sprintf("TestAsteriscNetworkOrRollupConfigRequired-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscNetworkOrRollupConfigRequired-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.Asterisc.Network = "" cfg.Asterisc.Network = ""
cfg.Asterisc.RollupConfigPath = "" cfg.Asterisc.RollupConfigPath = ""
cfg.Asterisc.L2GenesisPath = "genesis.json" cfg.Asterisc.L2GenesisPath = "genesis.json"
...@@ -327,7 +380,7 @@ func TestAsteriscRequiredArgs(t *testing.T) { ...@@ -327,7 +380,7 @@ func TestAsteriscRequiredArgs(t *testing.T) {
}) })
t.Run(fmt.Sprintf("TestAsteriscNetworkOrL2GenesisRequired-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscNetworkOrL2GenesisRequired-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.Asterisc.Network = "" cfg.Asterisc.Network = ""
cfg.Asterisc.RollupConfigPath = "foo.json" cfg.Asterisc.RollupConfigPath = "foo.json"
cfg.Asterisc.L2GenesisPath = "" cfg.Asterisc.L2GenesisPath = ""
...@@ -335,7 +388,7 @@ func TestAsteriscRequiredArgs(t *testing.T) { ...@@ -335,7 +388,7 @@ func TestAsteriscRequiredArgs(t *testing.T) {
}) })
t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndRollup-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndRollup-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.Asterisc.Network = validAsteriscNetwork cfg.Asterisc.Network = validAsteriscNetwork
cfg.Asterisc.RollupConfigPath = "foo.json" cfg.Asterisc.RollupConfigPath = "foo.json"
cfg.Asterisc.L2GenesisPath = "" cfg.Asterisc.L2GenesisPath = ""
...@@ -343,7 +396,7 @@ func TestAsteriscRequiredArgs(t *testing.T) { ...@@ -343,7 +396,7 @@ func TestAsteriscRequiredArgs(t *testing.T) {
}) })
t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndL2Genesis-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndL2Genesis-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.Asterisc.Network = validAsteriscNetwork cfg.Asterisc.Network = validAsteriscNetwork
cfg.Asterisc.RollupConfigPath = "" cfg.Asterisc.RollupConfigPath = ""
cfg.Asterisc.L2GenesisPath = "foo.json" cfg.Asterisc.L2GenesisPath = "foo.json"
...@@ -351,15 +404,27 @@ func TestAsteriscRequiredArgs(t *testing.T) { ...@@ -351,15 +404,27 @@ func TestAsteriscRequiredArgs(t *testing.T) {
}) })
t.Run(fmt.Sprintf("TestNetworkMustBeValid-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestNetworkMustBeValid-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.Asterisc.Network = "unknown" cfg.Asterisc.Network = "unknown"
require.ErrorIs(t, cfg.Check(), ErrAsteriscNetworkUnknown) require.ErrorIs(t, cfg.Check(), ErrAsteriscNetworkUnknown)
}) })
t.Run(fmt.Sprintf("TestDebugInfoDisabled-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestDebugInfoDisabled-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
require.False(t, cfg.Asterisc.DebugInfo) require.False(t, cfg.Asterisc.DebugInfo)
}) })
t.Run(fmt.Sprintf("TestVMBinExists-%v", traceType), func(t *testing.T) {
cfg := validConfig(t, traceType)
cfg.Asterisc.VmBin = nonExistingFile
require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscBin)
})
t.Run(fmt.Sprintf("TestServerExists-%v", traceType), func(t *testing.T) {
cfg := validConfig(t, traceType)
cfg.Asterisc.Server = nonExistingFile
require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscServer)
})
} }
} }
...@@ -368,33 +433,33 @@ func TestAsteriscKonaRequiredArgs(t *testing.T) { ...@@ -368,33 +433,33 @@ func TestAsteriscKonaRequiredArgs(t *testing.T) {
traceType := traceType traceType := traceType
t.Run(fmt.Sprintf("TestAsteriscKonaBinRequired-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscKonaBinRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType) config := validConfig(t, traceType)
config.AsteriscKona.VmBin = "" config.AsteriscKona.VmBin = ""
require.ErrorIs(t, config.Check(), ErrMissingAsteriscKonaBin) require.ErrorIs(t, config.Check(), ErrMissingAsteriscKonaBin)
}) })
t.Run(fmt.Sprintf("TestAsteriscKonaServerRequired-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscKonaServerRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType) config := validConfig(t, traceType)
config.AsteriscKona.Server = "" config.AsteriscKona.Server = ""
require.ErrorIs(t, config.Check(), ErrMissingAsteriscKonaServer) require.ErrorIs(t, config.Check(), ErrMissingAsteriscKonaServer)
}) })
t.Run(fmt.Sprintf("TestAsteriscKonaAbsolutePreStateOrBaseURLRequired-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscKonaAbsolutePreStateOrBaseURLRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType) config := validConfig(t, traceType)
config.AsteriscKonaAbsolutePreState = "" config.AsteriscKonaAbsolutePreState = ""
config.AsteriscKonaAbsolutePreStateBaseURL = nil config.AsteriscKonaAbsolutePreStateBaseURL = nil
require.ErrorIs(t, config.Check(), ErrMissingAsteriscKonaAbsolutePreState) require.ErrorIs(t, config.Check(), ErrMissingAsteriscKonaAbsolutePreState)
}) })
t.Run(fmt.Sprintf("TestAsteriscKonaAbsolutePreState-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscKonaAbsolutePreState-%v", traceType), func(t *testing.T) {
config := validConfig(traceType) config := validConfig(t, traceType)
config.AsteriscKonaAbsolutePreState = validAsteriscKonaAbsolutePreState config.AsteriscKonaAbsolutePreState = validAsteriscKonaAbsolutePreState
config.AsteriscKonaAbsolutePreStateBaseURL = nil config.AsteriscKonaAbsolutePreStateBaseURL = nil
require.NoError(t, config.Check()) require.NoError(t, config.Check())
}) })
t.Run(fmt.Sprintf("TestAsteriscKonaAbsolutePreStateBaseURL-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscKonaAbsolutePreStateBaseURL-%v", traceType), func(t *testing.T) {
config := validConfig(traceType) config := validConfig(t, traceType)
config.AsteriscKonaAbsolutePreState = "" config.AsteriscKonaAbsolutePreState = ""
config.AsteriscKonaAbsolutePreStateBaseURL = validAsteriscKonaAbsolutePreStateBaseURL config.AsteriscKonaAbsolutePreStateBaseURL = validAsteriscKonaAbsolutePreStateBaseURL
require.NoError(t, config.Check()) require.NoError(t, config.Check())
...@@ -402,21 +467,21 @@ func TestAsteriscKonaRequiredArgs(t *testing.T) { ...@@ -402,21 +467,21 @@ func TestAsteriscKonaRequiredArgs(t *testing.T) {
t.Run(fmt.Sprintf("TestAllowSupplyingBothAsteriscKonaAbsolutePreStateAndBaseURL-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAllowSupplyingBothAsteriscKonaAbsolutePreStateAndBaseURL-%v", traceType), func(t *testing.T) {
// Since the prestate base URL might be inherited from the --prestate-urls option, allow overriding it with a specific prestate // Since the prestate base URL might be inherited from the --prestate-urls option, allow overriding it with a specific prestate
config := validConfig(traceType) config := validConfig(t, traceType)
config.AsteriscKonaAbsolutePreState = validAsteriscKonaAbsolutePreState config.AsteriscKonaAbsolutePreState = validAsteriscKonaAbsolutePreState
config.AsteriscKonaAbsolutePreStateBaseURL = validAsteriscKonaAbsolutePreStateBaseURL config.AsteriscKonaAbsolutePreStateBaseURL = validAsteriscKonaAbsolutePreStateBaseURL
require.NoError(t, config.Check()) require.NoError(t, config.Check())
}) })
t.Run(fmt.Sprintf("TestL2RpcRequired-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestL2RpcRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType) config := validConfig(t, traceType)
config.L2Rpc = "" config.L2Rpc = ""
require.ErrorIs(t, config.Check(), ErrMissingL2Rpc) require.ErrorIs(t, config.Check(), ErrMissingL2Rpc)
}) })
t.Run(fmt.Sprintf("TestAsteriscKonaSnapshotFreq-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscKonaSnapshotFreq-%v", traceType), func(t *testing.T) {
t.Run("MustNotBeZero", func(t *testing.T) { t.Run("MustNotBeZero", func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.AsteriscKona.SnapshotFreq = 0 cfg.AsteriscKona.SnapshotFreq = 0
require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscKonaSnapshotFreq) require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscKonaSnapshotFreq)
}) })
...@@ -424,14 +489,14 @@ func TestAsteriscKonaRequiredArgs(t *testing.T) { ...@@ -424,14 +489,14 @@ func TestAsteriscKonaRequiredArgs(t *testing.T) {
t.Run(fmt.Sprintf("TestAsteriscKonaInfoFreq-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscKonaInfoFreq-%v", traceType), func(t *testing.T) {
t.Run("MustNotBeZero", func(t *testing.T) { t.Run("MustNotBeZero", func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.AsteriscKona.InfoFreq = 0 cfg.AsteriscKona.InfoFreq = 0
require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscKonaInfoFreq) require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscKonaInfoFreq)
}) })
}) })
t.Run(fmt.Sprintf("TestAsteriscKonaNetworkOrRollupConfigRequired-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscKonaNetworkOrRollupConfigRequired-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.AsteriscKona.Network = "" cfg.AsteriscKona.Network = ""
cfg.AsteriscKona.RollupConfigPath = "" cfg.AsteriscKona.RollupConfigPath = ""
cfg.AsteriscKona.L2GenesisPath = "genesis.json" cfg.AsteriscKona.L2GenesisPath = "genesis.json"
...@@ -439,7 +504,7 @@ func TestAsteriscKonaRequiredArgs(t *testing.T) { ...@@ -439,7 +504,7 @@ func TestAsteriscKonaRequiredArgs(t *testing.T) {
}) })
t.Run(fmt.Sprintf("TestAsteriscKonaNetworkOrL2GenesisRequired-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestAsteriscKonaNetworkOrL2GenesisRequired-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.AsteriscKona.Network = "" cfg.AsteriscKona.Network = ""
cfg.AsteriscKona.RollupConfigPath = "foo.json" cfg.AsteriscKona.RollupConfigPath = "foo.json"
cfg.AsteriscKona.L2GenesisPath = "" cfg.AsteriscKona.L2GenesisPath = ""
...@@ -447,7 +512,7 @@ func TestAsteriscKonaRequiredArgs(t *testing.T) { ...@@ -447,7 +512,7 @@ func TestAsteriscKonaRequiredArgs(t *testing.T) {
}) })
t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndRollup-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndRollup-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.AsteriscKona.Network = validAsteriscKonaNetwork cfg.AsteriscKona.Network = validAsteriscKonaNetwork
cfg.AsteriscKona.RollupConfigPath = "foo.json" cfg.AsteriscKona.RollupConfigPath = "foo.json"
cfg.AsteriscKona.L2GenesisPath = "" cfg.AsteriscKona.L2GenesisPath = ""
...@@ -455,7 +520,7 @@ func TestAsteriscKonaRequiredArgs(t *testing.T) { ...@@ -455,7 +520,7 @@ func TestAsteriscKonaRequiredArgs(t *testing.T) {
}) })
t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndL2Genesis-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndL2Genesis-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.AsteriscKona.Network = validAsteriscKonaNetwork cfg.AsteriscKona.Network = validAsteriscKonaNetwork
cfg.AsteriscKona.RollupConfigPath = "" cfg.AsteriscKona.RollupConfigPath = ""
cfg.AsteriscKona.L2GenesisPath = "foo.json" cfg.AsteriscKona.L2GenesisPath = "foo.json"
...@@ -463,40 +528,52 @@ func TestAsteriscKonaRequiredArgs(t *testing.T) { ...@@ -463,40 +528,52 @@ func TestAsteriscKonaRequiredArgs(t *testing.T) {
}) })
t.Run(fmt.Sprintf("TestNetworkMustBeValid-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestNetworkMustBeValid-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
cfg.AsteriscKona.Network = "unknown" cfg.AsteriscKona.Network = "unknown"
require.ErrorIs(t, cfg.Check(), ErrAsteriscKonaNetworkUnknown) require.ErrorIs(t, cfg.Check(), ErrAsteriscKonaNetworkUnknown)
}) })
t.Run(fmt.Sprintf("TestDebugInfoDisabled-%v", traceType), func(t *testing.T) { t.Run(fmt.Sprintf("TestDebugInfoDisabled-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType) cfg := validConfig(t, traceType)
require.False(t, cfg.AsteriscKona.DebugInfo) require.False(t, cfg.AsteriscKona.DebugInfo)
}) })
t.Run(fmt.Sprintf("TestVMBinExists-%v", traceType), func(t *testing.T) {
cfg := validConfig(t, traceType)
cfg.AsteriscKona.VmBin = nonExistingFile
require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscKonaBin)
})
t.Run(fmt.Sprintf("TestServerExists-%v", traceType), func(t *testing.T) {
cfg := validConfig(t, traceType)
cfg.AsteriscKona.Server = nonExistingFile
require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscKonaServer)
})
} }
} }
func TestDatadirRequired(t *testing.T) { func TestDatadirRequired(t *testing.T) {
config := validConfig(types.TraceTypeAlphabet) config := validConfig(t, types.TraceTypeAlphabet)
config.Datadir = "" config.Datadir = ""
require.ErrorIs(t, config.Check(), ErrMissingDatadir) require.ErrorIs(t, config.Check(), ErrMissingDatadir)
} }
func TestMaxConcurrency(t *testing.T) { func TestMaxConcurrency(t *testing.T) {
t.Run("Required", func(t *testing.T) { t.Run("Required", func(t *testing.T) {
config := validConfig(types.TraceTypeAlphabet) config := validConfig(t, types.TraceTypeAlphabet)
config.MaxConcurrency = 0 config.MaxConcurrency = 0
require.ErrorIs(t, config.Check(), ErrMaxConcurrencyZero) require.ErrorIs(t, config.Check(), ErrMaxConcurrencyZero)
}) })
t.Run("DefaultToNumberOfCPUs", func(t *testing.T) { t.Run("DefaultToNumberOfCPUs", func(t *testing.T) {
config := validConfig(types.TraceTypeAlphabet) config := validConfig(t, types.TraceTypeAlphabet)
require.EqualValues(t, runtime.NumCPU(), config.MaxConcurrency) require.EqualValues(t, runtime.NumCPU(), config.MaxConcurrency)
}) })
} }
func TestHttpPollInterval(t *testing.T) { func TestHttpPollInterval(t *testing.T) {
t.Run("Default", func(t *testing.T) { t.Run("Default", func(t *testing.T) {
config := validConfig(types.TraceTypeAlphabet) config := validConfig(t, types.TraceTypeAlphabet)
require.EqualValues(t, DefaultPollInterval, config.PollInterval) require.EqualValues(t, DefaultPollInterval, config.PollInterval)
}) })
} }
...@@ -505,7 +582,7 @@ func TestRollupRpcRequired(t *testing.T) { ...@@ -505,7 +582,7 @@ func TestRollupRpcRequired(t *testing.T) {
for _, traceType := range types.TraceTypes { for _, traceType := range types.TraceTypes {
traceType := traceType traceType := traceType
t.Run(traceType.String(), func(t *testing.T) { t.Run(traceType.String(), func(t *testing.T) {
config := validConfig(traceType) config := validConfig(t, traceType)
config.RollupRpc = "" config.RollupRpc = ""
require.ErrorIs(t, config.Check(), ErrMissingRollupRpc) require.ErrorIs(t, config.Check(), ErrMissingRollupRpc)
}) })
...@@ -513,7 +590,7 @@ func TestRollupRpcRequired(t *testing.T) { ...@@ -513,7 +590,7 @@ func TestRollupRpcRequired(t *testing.T) {
} }
func TestRequireConfigForMultipleTraceTypesForCannon(t *testing.T) { func TestRequireConfigForMultipleTraceTypesForCannon(t *testing.T) {
cfg := validConfig(types.TraceTypeCannon) cfg := validConfig(t, types.TraceTypeCannon)
cfg.TraceTypes = []types.TraceType{types.TraceTypeCannon, types.TraceTypeAlphabet} cfg.TraceTypes = []types.TraceType{types.TraceTypeCannon, types.TraceTypeAlphabet}
// Set all required options and check its valid // Set all required options and check its valid
cfg.RollupRpc = validRollupRpc cfg.RollupRpc = validRollupRpc
...@@ -531,7 +608,7 @@ func TestRequireConfigForMultipleTraceTypesForCannon(t *testing.T) { ...@@ -531,7 +608,7 @@ func TestRequireConfigForMultipleTraceTypesForCannon(t *testing.T) {
} }
func TestRequireConfigForMultipleTraceTypesForAsterisc(t *testing.T) { func TestRequireConfigForMultipleTraceTypesForAsterisc(t *testing.T) {
cfg := validConfig(types.TraceTypeAsterisc) cfg := validConfig(t, types.TraceTypeAsterisc)
cfg.TraceTypes = []types.TraceType{types.TraceTypeAsterisc, types.TraceTypeAlphabet} cfg.TraceTypes = []types.TraceType{types.TraceTypeAsterisc, types.TraceTypeAlphabet}
// Set all required options and check its valid // Set all required options and check its valid
cfg.RollupRpc = validRollupRpc cfg.RollupRpc = validRollupRpc
...@@ -549,8 +626,8 @@ func TestRequireConfigForMultipleTraceTypesForAsterisc(t *testing.T) { ...@@ -549,8 +626,8 @@ func TestRequireConfigForMultipleTraceTypesForAsterisc(t *testing.T) {
} }
func TestRequireConfigForMultipleTraceTypesForCannonAndAsterisc(t *testing.T) { func TestRequireConfigForMultipleTraceTypesForCannonAndAsterisc(t *testing.T) {
cfg := validConfig(types.TraceTypeCannon) cfg := validConfig(t, types.TraceTypeCannon)
applyValidConfigForAsterisc(&cfg) applyValidConfigForAsterisc(t, &cfg)
cfg.TraceTypes = []types.TraceType{types.TraceTypeCannon, types.TraceTypeAsterisc, types.TraceTypeAlphabet, types.TraceTypeFast} cfg.TraceTypes = []types.TraceType{types.TraceTypeCannon, types.TraceTypeAsterisc, types.TraceTypeAlphabet, types.TraceTypeFast}
// Set all required options and check its valid // Set all required options and check its valid
...@@ -560,7 +637,11 @@ func TestRequireConfigForMultipleTraceTypesForCannonAndAsterisc(t *testing.T) { ...@@ -560,7 +637,11 @@ func TestRequireConfigForMultipleTraceTypesForCannonAndAsterisc(t *testing.T) {
// Require cannon specific args // Require cannon specific args
cfg.Cannon.VmBin = "" cfg.Cannon.VmBin = ""
require.ErrorIs(t, cfg.Check(), ErrMissingCannonBin) require.ErrorIs(t, cfg.Check(), ErrMissingCannonBin)
cfg.Cannon.VmBin = validCannonBin tmpDir := t.TempDir()
vmBin := filepath.Join(tmpDir, validCannonBin)
err := ensureExists(vmBin)
require.NoError(t, err)
cfg.Cannon.VmBin = vmBin
// Require asterisc specific args // Require asterisc specific args
cfg.AsteriscAbsolutePreState = "" cfg.AsteriscAbsolutePreState = ""
...@@ -571,7 +652,10 @@ func TestRequireConfigForMultipleTraceTypesForCannonAndAsterisc(t *testing.T) { ...@@ -571,7 +652,10 @@ func TestRequireConfigForMultipleTraceTypesForCannonAndAsterisc(t *testing.T) {
// Require cannon specific args // Require cannon specific args
cfg.Asterisc.Server = "" cfg.Asterisc.Server = ""
require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscServer) require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscServer)
cfg.Asterisc.Server = validAsteriscOpProgramBin server := filepath.Join(tmpDir, validAsteriscOpProgramBin)
err = ensureExists(server)
require.NoError(t, err)
cfg.Asterisc.Server = server
// Check final config is valid // Check final config is valid
require.NoError(t, cfg.Check()) require.NoError(t, cfg.Check())
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment