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 (
"errors"
"fmt"
"net/url"
"os"
"runtime"
"slices"
"strconv"
......@@ -216,6 +217,14 @@ func (c Config) Check() error {
if c.Cannon.Server == "" {
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.RollupConfigPath == "" {
return ErrMissingCannonRollupConfig
......@@ -254,6 +263,14 @@ func (c Config) Check() error {
if c.Asterisc.Server == "" {
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.RollupConfigPath == "" {
return ErrMissingAsteriscRollupConfig
......@@ -289,6 +306,14 @@ func (c Config) Check() error {
if c.AsteriscKona.Server == "" {
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.RollupConfigPath == "" {
return ErrMissingAsteriscKonaRollupConfig
......
......@@ -3,6 +3,8 @@ package config
import (
"fmt"
"net/url"
"os"
"path/filepath"
"runtime"
"testing"
......@@ -32,6 +34,7 @@ var (
validAsteriscAbsolutePreState = "pre.json"
validAsteriscAbsolutePreStateBaseURL, _ = url.Parse("http://localhost/bar/")
nonExistingFile = "path/to/nonexistent/file"
validAsteriscKonaBin = "./bin/asterisc"
validAsteriscKonaServerBin = "./bin/kona-host"
validAsteriscKonaNetwork = "mainnet"
......@@ -43,37 +46,75 @@ var cannonTraceTypes = []types.TraceType{types.TraceTypeCannon, types.TraceTypeP
var asteriscTraceTypes = []types.TraceType{types.TraceTypeAsterisc}
var asteriscKonaTraceTypes = []types.TraceType{types.TraceTypeAsteriscKona}
func applyValidConfigForCannon(cfg *Config) {
cfg.Cannon.VmBin = validCannonBin
cfg.Cannon.Server = validCannonOpProgramBin
func ensureExists(path string) error {
_, err := os.Stat(path)
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.Cannon.Network = validCannonNetwork
}
func applyValidConfigForAsterisc(cfg *Config) {
cfg.Asterisc.VmBin = validAsteriscBin
cfg.Asterisc.Server = validAsteriscOpProgramBin
func applyValidConfigForAsterisc(t *testing.T, cfg *Config) {
tmpDir := t.TempDir()
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.Asterisc.Network = validAsteriscNetwork
}
func applyValidConfigForAsteriscKona(cfg *Config) {
cfg.AsteriscKona.VmBin = validAsteriscKonaBin
cfg.AsteriscKona.Server = validAsteriscKonaServerBin
func applyValidConfigForAsteriscKona(t *testing.T, cfg *Config) {
tmpDir := t.TempDir()
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.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)
if traceType == types.TraceTypeCannon || traceType == types.TraceTypePermissioned {
applyValidConfigForCannon(&cfg)
applyValidConfigForCannon(t, &cfg)
}
if traceType == types.TraceTypeAsterisc {
applyValidConfigForAsterisc(&cfg)
applyValidConfigForAsterisc(t, &cfg)
}
if traceType == types.TraceTypeAsteriscKona {
applyValidConfigForAsteriscKona(&cfg)
applyValidConfigForAsteriscKona(t, &cfg)
}
return cfg
}
......@@ -83,7 +124,7 @@ func TestValidConfigIsValid(t *testing.T) {
for _, traceType := range types.TraceTypes {
traceType := traceType
t.Run(traceType.String(), func(t *testing.T) {
err := validConfig(traceType).Check()
err := validConfig(t, traceType).Check()
require.NoError(t, err)
})
}
......@@ -91,38 +132,38 @@ func TestValidConfigIsValid(t *testing.T) {
func TestTxMgrConfig(t *testing.T) {
t.Run("Invalid", func(t *testing.T) {
config := validConfig(types.TraceTypeCannon)
config := validConfig(t, types.TraceTypeCannon)
config.TxMgrConfig = txmgr.CLIConfig{}
require.Equal(t, config.Check().Error(), "must provide a L1 RPC url")
})
}
func TestL1EthRpcRequired(t *testing.T) {
config := validConfig(types.TraceTypeCannon)
config := validConfig(t, types.TraceTypeCannon)
config.L1EthRpc = ""
require.ErrorIs(t, config.Check(), ErrMissingL1EthRPC)
}
func TestL1BeaconRequired(t *testing.T) {
config := validConfig(types.TraceTypeCannon)
config := validConfig(t, types.TraceTypeCannon)
config.L1Beacon = ""
require.ErrorIs(t, config.Check(), ErrMissingL1Beacon)
}
func TestGameFactoryAddressRequired(t *testing.T) {
config := validConfig(types.TraceTypeCannon)
config := validConfig(t, types.TraceTypeCannon)
config.GameFactoryAddress = common.Address{}
require.ErrorIs(t, config.Check(), ErrMissingGameFactoryAddress)
}
func TestSelectiveClaimResolutionNotRequired(t *testing.T) {
config := validConfig(types.TraceTypeCannon)
config := validConfig(t, types.TraceTypeCannon)
require.Equal(t, false, config.SelectiveClaimResolution)
require.NoError(t, config.Check())
}
func TestGameAllowlistNotRequired(t *testing.T) {
config := validConfig(types.TraceTypeCannon)
config := validConfig(t, types.TraceTypeCannon)
config.GameAllowlist = []common.Address{}
require.NoError(t, config.Check())
}
......@@ -132,33 +173,33 @@ func TestCannonRequiredArgs(t *testing.T) {
traceType := traceType
t.Run(fmt.Sprintf("TestCannonBinRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType)
config := validConfig(t, traceType)
config.Cannon.VmBin = ""
require.ErrorIs(t, config.Check(), ErrMissingCannonBin)
})
t.Run(fmt.Sprintf("TestCannonServerRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType)
config := validConfig(t, traceType)
config.Cannon.Server = ""
require.ErrorIs(t, config.Check(), ErrMissingCannonServer)
})
t.Run(fmt.Sprintf("TestCannonAbsolutePreStateOrBaseURLRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType)
config := validConfig(t, traceType)
config.CannonAbsolutePreState = ""
config.CannonAbsolutePreStateBaseURL = nil
require.ErrorIs(t, config.Check(), ErrMissingCannonAbsolutePreState)
})
t.Run(fmt.Sprintf("TestCannonAbsolutePreState-%v", traceType), func(t *testing.T) {
config := validConfig(traceType)
config := validConfig(t, traceType)
config.CannonAbsolutePreState = validCannonAbsolutePreState
config.CannonAbsolutePreStateBaseURL = nil
require.NoError(t, config.Check())
})
t.Run(fmt.Sprintf("TestCannonAbsolutePreStateBaseURL-%v", traceType), func(t *testing.T) {
config := validConfig(traceType)
config := validConfig(t, traceType)
config.CannonAbsolutePreState = ""
config.CannonAbsolutePreStateBaseURL = validCannonAbsolutePreStateBaseURL
require.NoError(t, config.Check())
......@@ -166,21 +207,21 @@ func TestCannonRequiredArgs(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
config := validConfig(traceType)
config := validConfig(t, traceType)
config.CannonAbsolutePreState = validCannonAbsolutePreState
config.CannonAbsolutePreStateBaseURL = validCannonAbsolutePreStateBaseURL
require.NoError(t, config.Check())
})
t.Run(fmt.Sprintf("TestL2RpcRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType)
config := validConfig(t, traceType)
config.L2Rpc = ""
require.ErrorIs(t, config.Check(), ErrMissingL2Rpc)
})
t.Run(fmt.Sprintf("TestCannonSnapshotFreq-%v", traceType), func(t *testing.T) {
t.Run("MustNotBeZero", func(t *testing.T) {
cfg := validConfig(traceType)
cfg := validConfig(t, traceType)
cfg.Cannon.SnapshotFreq = 0
require.ErrorIs(t, cfg.Check(), ErrMissingCannonSnapshotFreq)
})
......@@ -188,14 +229,14 @@ func TestCannonRequiredArgs(t *testing.T) {
t.Run(fmt.Sprintf("TestCannonInfoFreq-%v", traceType), func(t *testing.T) {
t.Run("MustNotBeZero", func(t *testing.T) {
cfg := validConfig(traceType)
cfg := validConfig(t, traceType)
cfg.Cannon.InfoFreq = 0
require.ErrorIs(t, cfg.Check(), ErrMissingCannonInfoFreq)
})
})
t.Run(fmt.Sprintf("TestCannonNetworkOrRollupConfigRequired-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType)
cfg := validConfig(t, traceType)
cfg.Cannon.Network = ""
cfg.Cannon.RollupConfigPath = ""
cfg.Cannon.L2GenesisPath = "genesis.json"
......@@ -203,7 +244,7 @@ func TestCannonRequiredArgs(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.RollupConfigPath = "foo.json"
cfg.Cannon.L2GenesisPath = ""
......@@ -211,7 +252,7 @@ func TestCannonRequiredArgs(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.RollupConfigPath = "foo.json"
cfg.Cannon.L2GenesisPath = ""
......@@ -219,7 +260,7 @@ func TestCannonRequiredArgs(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.RollupConfigPath = ""
cfg.Cannon.L2GenesisPath = "foo.json"
......@@ -227,27 +268,39 @@ func TestCannonRequiredArgs(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"
require.ErrorIs(t, cfg.Check(), ErrCannonNetworkUnknown)
})
t.Run(fmt.Sprintf("TestNetworkMayBeAnyChainID-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType)
cfg := validConfig(t, traceType)
cfg.Cannon.Network = "467294"
require.NoError(t, cfg.Check())
})
t.Run(fmt.Sprintf("TestNetworkInvalidWhenNotEntirelyNumeric-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType)
cfg := validConfig(t, traceType)
cfg.Cannon.Network = "467294a"
require.ErrorIs(t, cfg.Check(), ErrCannonNetworkUnknown)
})
t.Run(fmt.Sprintf("TestDebugInfoEnabled-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType)
cfg := validConfig(t, traceType)
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) {
traceType := traceType
t.Run(fmt.Sprintf("TestAsteriscBinRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType)
config := validConfig(t, traceType)
config.Asterisc.VmBin = ""
require.ErrorIs(t, config.Check(), ErrMissingAsteriscBin)
})
t.Run(fmt.Sprintf("TestAsteriscServerRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType)
config := validConfig(t, traceType)
config.Asterisc.Server = ""
require.ErrorIs(t, config.Check(), ErrMissingAsteriscServer)
})
t.Run(fmt.Sprintf("TestAsteriscAbsolutePreStateOrBaseURLRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType)
config := validConfig(t, traceType)
config.AsteriscAbsolutePreState = ""
config.AsteriscAbsolutePreStateBaseURL = nil
require.ErrorIs(t, config.Check(), ErrMissingAsteriscAbsolutePreState)
})
t.Run(fmt.Sprintf("TestAsteriscAbsolutePreState-%v", traceType), func(t *testing.T) {
config := validConfig(traceType)
config := validConfig(t, traceType)
config.AsteriscAbsolutePreState = validAsteriscAbsolutePreState
config.AsteriscAbsolutePreStateBaseURL = nil
require.NoError(t, config.Check())
})
t.Run(fmt.Sprintf("TestAsteriscAbsolutePreStateBaseURL-%v", traceType), func(t *testing.T) {
config := validConfig(traceType)
config := validConfig(t, traceType)
config.AsteriscAbsolutePreState = ""
config.AsteriscAbsolutePreStateBaseURL = validAsteriscAbsolutePreStateBaseURL
require.NoError(t, config.Check())
......@@ -290,21 +343,21 @@ func TestAsteriscRequiredArgs(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
config := validConfig(traceType)
config := validConfig(t, traceType)
config.AsteriscAbsolutePreState = validAsteriscAbsolutePreState
config.AsteriscAbsolutePreStateBaseURL = validAsteriscAbsolutePreStateBaseURL
require.NoError(t, config.Check())
})
t.Run(fmt.Sprintf("TestL2RpcRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType)
config := validConfig(t, traceType)
config.L2Rpc = ""
require.ErrorIs(t, config.Check(), ErrMissingL2Rpc)
})
t.Run(fmt.Sprintf("TestAsteriscSnapshotFreq-%v", traceType), func(t *testing.T) {
t.Run("MustNotBeZero", func(t *testing.T) {
cfg := validConfig(traceType)
cfg := validConfig(t, traceType)
cfg.Asterisc.SnapshotFreq = 0
require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscSnapshotFreq)
})
......@@ -312,14 +365,14 @@ func TestAsteriscRequiredArgs(t *testing.T) {
t.Run(fmt.Sprintf("TestAsteriscInfoFreq-%v", traceType), func(t *testing.T) {
t.Run("MustNotBeZero", func(t *testing.T) {
cfg := validConfig(traceType)
cfg := validConfig(t, traceType)
cfg.Asterisc.InfoFreq = 0
require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscInfoFreq)
})
})
t.Run(fmt.Sprintf("TestAsteriscNetworkOrRollupConfigRequired-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType)
cfg := validConfig(t, traceType)
cfg.Asterisc.Network = ""
cfg.Asterisc.RollupConfigPath = ""
cfg.Asterisc.L2GenesisPath = "genesis.json"
......@@ -327,7 +380,7 @@ func TestAsteriscRequiredArgs(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.RollupConfigPath = "foo.json"
cfg.Asterisc.L2GenesisPath = ""
......@@ -335,7 +388,7 @@ func TestAsteriscRequiredArgs(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.RollupConfigPath = "foo.json"
cfg.Asterisc.L2GenesisPath = ""
......@@ -343,7 +396,7 @@ func TestAsteriscRequiredArgs(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.RollupConfigPath = ""
cfg.Asterisc.L2GenesisPath = "foo.json"
......@@ -351,15 +404,27 @@ func TestAsteriscRequiredArgs(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"
require.ErrorIs(t, cfg.Check(), ErrAsteriscNetworkUnknown)
})
t.Run(fmt.Sprintf("TestDebugInfoDisabled-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType)
cfg := validConfig(t, traceType)
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) {
traceType := traceType
t.Run(fmt.Sprintf("TestAsteriscKonaBinRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType)
config := validConfig(t, traceType)
config.AsteriscKona.VmBin = ""
require.ErrorIs(t, config.Check(), ErrMissingAsteriscKonaBin)
})
t.Run(fmt.Sprintf("TestAsteriscKonaServerRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType)
config := validConfig(t, traceType)
config.AsteriscKona.Server = ""
require.ErrorIs(t, config.Check(), ErrMissingAsteriscKonaServer)
})
t.Run(fmt.Sprintf("TestAsteriscKonaAbsolutePreStateOrBaseURLRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType)
config := validConfig(t, traceType)
config.AsteriscKonaAbsolutePreState = ""
config.AsteriscKonaAbsolutePreStateBaseURL = nil
require.ErrorIs(t, config.Check(), ErrMissingAsteriscKonaAbsolutePreState)
})
t.Run(fmt.Sprintf("TestAsteriscKonaAbsolutePreState-%v", traceType), func(t *testing.T) {
config := validConfig(traceType)
config := validConfig(t, traceType)
config.AsteriscKonaAbsolutePreState = validAsteriscKonaAbsolutePreState
config.AsteriscKonaAbsolutePreStateBaseURL = nil
require.NoError(t, config.Check())
})
t.Run(fmt.Sprintf("TestAsteriscKonaAbsolutePreStateBaseURL-%v", traceType), func(t *testing.T) {
config := validConfig(traceType)
config := validConfig(t, traceType)
config.AsteriscKonaAbsolutePreState = ""
config.AsteriscKonaAbsolutePreStateBaseURL = validAsteriscKonaAbsolutePreStateBaseURL
require.NoError(t, config.Check())
......@@ -402,21 +467,21 @@ func TestAsteriscKonaRequiredArgs(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
config := validConfig(traceType)
config := validConfig(t, traceType)
config.AsteriscKonaAbsolutePreState = validAsteriscKonaAbsolutePreState
config.AsteriscKonaAbsolutePreStateBaseURL = validAsteriscKonaAbsolutePreStateBaseURL
require.NoError(t, config.Check())
})
t.Run(fmt.Sprintf("TestL2RpcRequired-%v", traceType), func(t *testing.T) {
config := validConfig(traceType)
config := validConfig(t, traceType)
config.L2Rpc = ""
require.ErrorIs(t, config.Check(), ErrMissingL2Rpc)
})
t.Run(fmt.Sprintf("TestAsteriscKonaSnapshotFreq-%v", traceType), func(t *testing.T) {
t.Run("MustNotBeZero", func(t *testing.T) {
cfg := validConfig(traceType)
cfg := validConfig(t, traceType)
cfg.AsteriscKona.SnapshotFreq = 0
require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscKonaSnapshotFreq)
})
......@@ -424,14 +489,14 @@ func TestAsteriscKonaRequiredArgs(t *testing.T) {
t.Run(fmt.Sprintf("TestAsteriscKonaInfoFreq-%v", traceType), func(t *testing.T) {
t.Run("MustNotBeZero", func(t *testing.T) {
cfg := validConfig(traceType)
cfg := validConfig(t, traceType)
cfg.AsteriscKona.InfoFreq = 0
require.ErrorIs(t, cfg.Check(), ErrMissingAsteriscKonaInfoFreq)
})
})
t.Run(fmt.Sprintf("TestAsteriscKonaNetworkOrRollupConfigRequired-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType)
cfg := validConfig(t, traceType)
cfg.AsteriscKona.Network = ""
cfg.AsteriscKona.RollupConfigPath = ""
cfg.AsteriscKona.L2GenesisPath = "genesis.json"
......@@ -439,7 +504,7 @@ func TestAsteriscKonaRequiredArgs(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.RollupConfigPath = "foo.json"
cfg.AsteriscKona.L2GenesisPath = ""
......@@ -447,7 +512,7 @@ func TestAsteriscKonaRequiredArgs(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.RollupConfigPath = "foo.json"
cfg.AsteriscKona.L2GenesisPath = ""
......@@ -455,7 +520,7 @@ func TestAsteriscKonaRequiredArgs(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.RollupConfigPath = ""
cfg.AsteriscKona.L2GenesisPath = "foo.json"
......@@ -463,40 +528,52 @@ func TestAsteriscKonaRequiredArgs(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"
require.ErrorIs(t, cfg.Check(), ErrAsteriscKonaNetworkUnknown)
})
t.Run(fmt.Sprintf("TestDebugInfoDisabled-%v", traceType), func(t *testing.T) {
cfg := validConfig(traceType)
cfg := validConfig(t, traceType)
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) {
config := validConfig(types.TraceTypeAlphabet)
config := validConfig(t, types.TraceTypeAlphabet)
config.Datadir = ""
require.ErrorIs(t, config.Check(), ErrMissingDatadir)
}
func TestMaxConcurrency(t *testing.T) {
t.Run("Required", func(t *testing.T) {
config := validConfig(types.TraceTypeAlphabet)
config := validConfig(t, types.TraceTypeAlphabet)
config.MaxConcurrency = 0
require.ErrorIs(t, config.Check(), ErrMaxConcurrencyZero)
})
t.Run("DefaultToNumberOfCPUs", func(t *testing.T) {
config := validConfig(types.TraceTypeAlphabet)
config := validConfig(t, types.TraceTypeAlphabet)
require.EqualValues(t, runtime.NumCPU(), config.MaxConcurrency)
})
}
func TestHttpPollInterval(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)
})
}
......@@ -505,7 +582,7 @@ func TestRollupRpcRequired(t *testing.T) {
for _, traceType := range types.TraceTypes {
traceType := traceType
t.Run(traceType.String(), func(t *testing.T) {
config := validConfig(traceType)
config := validConfig(t, traceType)
config.RollupRpc = ""
require.ErrorIs(t, config.Check(), ErrMissingRollupRpc)
})
......@@ -513,7 +590,7 @@ func TestRollupRpcRequired(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}
// Set all required options and check its valid
cfg.RollupRpc = validRollupRpc
......@@ -531,7 +608,7 @@ func TestRequireConfigForMultipleTraceTypesForCannon(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}
// Set all required options and check its valid
cfg.RollupRpc = validRollupRpc
......@@ -549,8 +626,8 @@ func TestRequireConfigForMultipleTraceTypesForAsterisc(t *testing.T) {
}
func TestRequireConfigForMultipleTraceTypesForCannonAndAsterisc(t *testing.T) {
cfg := validConfig(types.TraceTypeCannon)
applyValidConfigForAsterisc(&cfg)
cfg := validConfig(t, types.TraceTypeCannon)
applyValidConfigForAsterisc(t, &cfg)
cfg.TraceTypes = []types.TraceType{types.TraceTypeCannon, types.TraceTypeAsterisc, types.TraceTypeAlphabet, types.TraceTypeFast}
// Set all required options and check its valid
......@@ -560,7 +637,11 @@ func TestRequireConfigForMultipleTraceTypesForCannonAndAsterisc(t *testing.T) {
// Require cannon specific args
cfg.Cannon.VmBin = ""
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
cfg.AsteriscAbsolutePreState = ""
......@@ -571,7 +652,10 @@ func TestRequireConfigForMultipleTraceTypesForCannonAndAsterisc(t *testing.T) {
// Require cannon specific args
cfg.Asterisc.Server = ""
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
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