aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/ethtest
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/ethtest')
-rw-r--r--cmd/ethtest/main.go104
1 files changed, 67 insertions, 37 deletions
diff --git a/cmd/ethtest/main.go b/cmd/ethtest/main.go
index 07554c89f..844c15e32 100644
--- a/cmd/ethtest/main.go
+++ b/cmd/ethtest/main.go
@@ -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)
}