mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-17 01:13:45 +00:00
cmd/evm: Fix statetest runner to be more json friendly
This commit is contained in:
parent
2fcb67443e
commit
f7162201a9
1 changed files with 22 additions and 10 deletions
|
|
@ -37,6 +37,13 @@ var stateTestCommand = cli.Command{
|
||||||
ArgsUsage: "<file>",
|
ArgsUsage: "<file>",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type StatetestResult struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Pass bool `json:"pass"`
|
||||||
|
Fork string `json:"fork"`
|
||||||
|
Error string `json:"error,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
func stateTestCmd(ctx *cli.Context) error {
|
func stateTestCmd(ctx *cli.Context) error {
|
||||||
glogger := log.NewGlogHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(false)))
|
glogger := log.NewGlogHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(false)))
|
||||||
glogger.Verbosity(log.Lvl(ctx.GlobalInt(VerbosityFlag.Name)))
|
glogger.Verbosity(log.Lvl(ctx.GlobalInt(VerbosityFlag.Name)))
|
||||||
|
|
@ -52,7 +59,7 @@ func stateTestCmd(ctx *cli.Context) error {
|
||||||
// chainConfig *params.ChainConfig
|
// chainConfig *params.ChainConfig
|
||||||
)
|
)
|
||||||
if ctx.GlobalBool(MachineFlag.Name) {
|
if ctx.GlobalBool(MachineFlag.Name) {
|
||||||
tracer = NewJSONLogger(logconfig, os.Stdout)
|
tracer = NewJSONLogger(logconfig, os.Stderr)
|
||||||
} else if ctx.GlobalBool(DebugFlag.Name) {
|
} else if ctx.GlobalBool(DebugFlag.Name) {
|
||||||
debugLogger = vm.NewStructLogger(logconfig)
|
debugLogger = vm.NewStructLogger(logconfig)
|
||||||
tracer = debugLogger
|
tracer = debugLogger
|
||||||
|
|
@ -75,32 +82,37 @@ func stateTestCmd(ctx *cli.Context) error {
|
||||||
if err = json.Unmarshal(src, &tests); err != nil {
|
if err = json.Unmarshal(src, &tests); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var results = make([]StatetestResult, 0, len(tests))
|
||||||
|
|
||||||
cfg := vm.Config{
|
cfg := vm.Config{
|
||||||
Tracer: tracer,
|
Tracer: tracer,
|
||||||
Debug: ctx.GlobalBool(DebugFlag.Name) || ctx.GlobalBool(MachineFlag.Name),
|
Debug: ctx.GlobalBool(DebugFlag.Name) || ctx.GlobalBool(MachineFlag.Name),
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range tests {
|
for key, test := range tests {
|
||||||
for _, st := range test.Subtests() {
|
for _, st := range test.Subtests() {
|
||||||
fmt.Printf("Test %v\n", st)
|
result := &StatetestResult{
|
||||||
fmt.Printf("====================\n")
|
Name: key,
|
||||||
|
Fork: st.Fork,
|
||||||
|
Pass: true,
|
||||||
|
}
|
||||||
|
|
||||||
if err = test.Run(st, cfg); err != nil {
|
if err = test.Run(st, cfg); err != nil {
|
||||||
fmt.Printf("FAIL : %v\n", err)
|
result.Error = err.Error()
|
||||||
} else {
|
result.Pass = false
|
||||||
fmt.Printf("PASS\n")
|
|
||||||
}
|
}
|
||||||
|
results = append(results, *result)
|
||||||
|
|
||||||
if ctx.GlobalBool(DebugFlag.Name) {
|
if ctx.GlobalBool(DebugFlag.Name) {
|
||||||
if debugLogger != nil {
|
if debugLogger != nil {
|
||||||
fmt.Fprintln(os.Stderr, "#### TRACE ####")
|
fmt.Fprintln(os.Stderr, "#### TRACE ####")
|
||||||
vm.WriteTrace(os.Stderr, debugLogger.StructLogs())
|
vm.WriteTrace(os.Stderr, debugLogger.StructLogs())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("====================\n")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
json.NewEncoder(os.Stdout).Encode(results)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue