|
|
|
@ -22,62 +22,92 @@ |
|
|
|
|
package main |
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"io/ioutil" |
|
|
|
|
"os" |
|
|
|
|
|
|
|
|
|
"github.com/ethereum/go-ethereum/logger/glog" |
|
|
|
|
"github.com/ethereum/go-ethereum/tests" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
func getFiles(path string) ([]string, error) { |
|
|
|
|
var files []string |
|
|
|
|
f, err := os.Open(path) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
defer f.Close() |
|
|
|
|
|
|
|
|
|
fi, err := f.Stat() |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
switch mode := fi.Mode(); { |
|
|
|
|
case mode.IsDir(): |
|
|
|
|
fi, _ := ioutil.ReadDir(path) |
|
|
|
|
files = make([]string, len(fi)) |
|
|
|
|
for i, v := range fi { |
|
|
|
|
// only go 1 depth and leave directory entires blank
|
|
|
|
|
if !v.IsDir() { |
|
|
|
|
files[i] = path + v.Name() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
case mode.IsRegular(): |
|
|
|
|
files = make([]string, 1) |
|
|
|
|
files[0] = path |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return files, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func main() { |
|
|
|
|
glog.SetToStderr(true) |
|
|
|
|
|
|
|
|
|
var continueOnError bool = false |
|
|
|
|
// vm.Debug = true
|
|
|
|
|
|
|
|
|
|
if len(os.Args) < 2 { |
|
|
|
|
glog.Exit("Must specify test type") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
test := os.Args[1] |
|
|
|
|
testtype := os.Args[1] |
|
|
|
|
var pattern string |
|
|
|
|
if len(os.Args) > 2 { |
|
|
|
|
pattern = os.Args[2] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// var code int
|
|
|
|
|
switch test { |
|
|
|
|
case "vm", "VMTests": |
|
|
|
|
if len(os.Args) > 2 { |
|
|
|
|
if err := tests.RunVmTest(os.Args[2]); err != nil { |
|
|
|
|
glog.Errorln(err) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
glog.Exit("Must supply file argument") |
|
|
|
|
} |
|
|
|
|
case "state", "StateTest": |
|
|
|
|
if len(os.Args) > 2 { |
|
|
|
|
if err := tests.RunStateTest(os.Args[2]); err != nil { |
|
|
|
|
glog.Errorln(err) |
|
|
|
|
} |
|
|
|
|
// code = RunVmTest(strings.NewReader(os.Args[2]))
|
|
|
|
|
} else { |
|
|
|
|
glog.Exit("Must supply file argument") |
|
|
|
|
// code = RunVmTest(os.Stdin)
|
|
|
|
|
files, err := getFiles(pattern) |
|
|
|
|
if err != nil { |
|
|
|
|
glog.Fatal(err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for _, testfile := range files { |
|
|
|
|
// Skip blank entries
|
|
|
|
|
if len(testfile) == 0 { |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
case "tx", "TransactionTests": |
|
|
|
|
if len(os.Args) > 2 { |
|
|
|
|
if err := tests.RunTransactionTests(os.Args[2]); err != nil { |
|
|
|
|
glog.Errorln(err) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
glog.Exit("Must supply file argument") |
|
|
|
|
// TODO allow io.Reader to be passed so Stdin can be piped
|
|
|
|
|
// RunVmTest(strings.NewReader(os.Args[2]))
|
|
|
|
|
// RunVmTest(os.Stdin)
|
|
|
|
|
var err error |
|
|
|
|
switch testtype { |
|
|
|
|
case "vm", "VMTests": |
|
|
|
|
err = tests.RunVmTest(testfile) |
|
|
|
|
case "state", "StateTest": |
|
|
|
|
err = tests.RunStateTest(testfile) |
|
|
|
|
case "tx", "TransactionTests": |
|
|
|
|
err = tests.RunTransactionTests(testfile) |
|
|
|
|
case "bc", "BlockChainTest": |
|
|
|
|
err = tests.RunBlockTest(testfile) |
|
|
|
|
default: |
|
|
|
|
glog.Fatalln("Invalid test type specified") |
|
|
|
|
} |
|
|
|
|
case "bc", "BlockChainTest": |
|
|
|
|
if len(os.Args) > 2 { |
|
|
|
|
if err := tests.RunBlockTest(os.Args[2]); err != nil { |
|
|
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
if continueOnError { |
|
|
|
|
glog.Errorln(err) |
|
|
|
|
} else { |
|
|
|
|
glog.Fatalln(err) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
glog.Exit("Must supply file argument") |
|
|
|
|
} |
|
|
|
|
default: |
|
|
|
|
glog.Exit("Invalid test type specified") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// os.Exit(code)
|
|
|
|
|
} |
|
|
|
|