Expand CLI options to allow running all tests
This commit is contained in:
		
							parent
							
								
									516362bcad
								
							
						
					
					
						commit
						49336675f3
					
				| @ -22,14 +22,60 @@ | |||||||
| package main | package main | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | 	"fmt" | ||||||
| 	"io/ioutil" | 	"io/ioutil" | ||||||
| 	"os" | 	"os" | ||||||
|  | 	"path/filepath" | ||||||
| 
 | 
 | ||||||
|  | 	"github.com/codegangsta/cli" | ||||||
| 	"github.com/ethereum/go-ethereum/logger/glog" | 	"github.com/ethereum/go-ethereum/logger/glog" | ||||||
| 	"github.com/ethereum/go-ethereum/tests" | 	"github.com/ethereum/go-ethereum/tests" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | var ( | ||||||
|  | 	continueOnError = false | ||||||
|  | 	testExtension   = ".json" | ||||||
|  | 	defaultTest     = "all" | ||||||
|  | 	defaultDir      = "." | ||||||
|  | 	allTests        = []string{"BlockTests", "StateTests", "TransactionTests", "VMTests"} | ||||||
|  | 
 | ||||||
|  | 	TestFlag = cli.StringFlag{ | ||||||
|  | 		Name:  "test", | ||||||
|  | 		Usage: "Test type (string): VMTests, TransactionTests, StateTests, BlockTests", | ||||||
|  | 		Value: defaultTest, | ||||||
|  | 	} | ||||||
|  | 	FileFlag = cli.StringFlag{ | ||||||
|  | 		Name:   "file", | ||||||
|  | 		Usage:  "Test file or directory. Directories are searched for .json files 1 level deep", | ||||||
|  | 		Value:  defaultDir, | ||||||
|  | 		EnvVar: "ETHEREUM_TEST_PATH", | ||||||
|  | 	} | ||||||
|  | 	ContinueOnErrorFlag = cli.BoolFlag{ | ||||||
|  | 		Name:  "continue", | ||||||
|  | 		Usage: "Continue running tests on error (true) or exit immediately (false)", | ||||||
|  | 	} | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func runTest(test, file string) error { | ||||||
|  | 	// glog.Infoln("runTest", test, file)
 | ||||||
|  | 	var err error | ||||||
|  | 	switch test { | ||||||
|  | 	case "bc", "BlockTest", "BlockTests", "BlockChainTest": | ||||||
|  | 		err = tests.RunBlockTest(file) | ||||||
|  | 	case "st", "state", "StateTest", "StateTests": | ||||||
|  | 		err = tests.RunStateTest(file) | ||||||
|  | 	case "tx", "TransactionTest", "TransactionTests": | ||||||
|  | 		err = tests.RunTransactionTests(file) | ||||||
|  | 	case "vm", "VMTest", "VMTests": | ||||||
|  | 		err = tests.RunVmTest(file) | ||||||
|  | 	default: | ||||||
|  | 		err = fmt.Errorf("Invalid test type specified:", test) | ||||||
|  | 	} | ||||||
|  | 	return err | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func getFiles(path string) ([]string, error) { | func getFiles(path string) ([]string, error) { | ||||||
|  | 	// glog.Infoln("getFiles ", path)
 | ||||||
| 	var files []string | 	var files []string | ||||||
| 	f, err := os.Open(path) | 	f, err := os.Open(path) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| @ -48,8 +94,9 @@ func getFiles(path string) ([]string, error) { | |||||||
| 		files = make([]string, len(fi)) | 		files = make([]string, len(fi)) | ||||||
| 		for i, v := range fi { | 		for i, v := range fi { | ||||||
| 			// only go 1 depth and leave directory entires blank
 | 			// only go 1 depth and leave directory entires blank
 | ||||||
| 			if !v.IsDir() { | 			if !v.IsDir() && v.Name()[len(v.Name())-len(testExtension):len(v.Name())] == testExtension { | ||||||
| 				files[i] = path + v.Name() | 				files[i] = filepath.Join(path, v.Name()) | ||||||
|  | 				// glog.Infoln(files[i])
 | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	case mode.IsRegular(): | 	case mode.IsRegular(): | ||||||
| @ -60,54 +107,75 @@ func getFiles(path string) ([]string, error) { | |||||||
| 	return files, nil | 	return files, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func main() { | func runSuite(c *cli.Context) { | ||||||
| 	glog.SetToStderr(true) | 	flagTest := c.GlobalString(TestFlag.Name) | ||||||
| 	var continueOnError bool = false | 	flagFile := c.GlobalString(FileFlag.Name) | ||||||
| 	// vm.Debug = true
 | 	continueOnError = c.GlobalBool(ContinueOnErrorFlag.Name) | ||||||
| 
 | 
 | ||||||
| 	if len(os.Args) < 2 { | 	var tests []string | ||||||
| 		glog.Exit("Must specify test type") | 
 | ||||||
|  | 	if flagTest == defaultTest { | ||||||
|  | 		tests = allTests | ||||||
|  | 	} else { | ||||||
|  | 		tests = []string{flagTest} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	testtype := os.Args[1] | 	for _, curTest := range tests { | ||||||
| 	var pattern string | 		// glog.Infoln("runSuite", curTest, flagFile)
 | ||||||
| 	if len(os.Args) > 2 { |  | ||||||
| 		pattern = os.Args[2] |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	files, err := getFiles(pattern) |  | ||||||
| 	if err != nil { |  | ||||||
| 		glog.Fatal(err) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for _, testfile := range files { |  | ||||||
| 		// Skip blank entries
 |  | ||||||
| 		if len(testfile) == 0 { |  | ||||||
| 			continue |  | ||||||
| 		} |  | ||||||
| 		// TODO allow io.Reader to be passed so Stdin can be piped
 |  | ||||||
| 		// RunVmTest(strings.NewReader(os.Args[2]))
 |  | ||||||
| 		// RunVmTest(os.Stdin)
 |  | ||||||
| 		var err error | 		var err error | ||||||
| 		switch testtype { | 		var files []string | ||||||
| 		case "vm", "VMTests": | 		if flagTest == defaultTest { | ||||||
| 			err = tests.RunVmTest(testfile) | 			files, err = getFiles(filepath.Join(flagFile, curTest)) | ||||||
| 		case "state", "StateTest": | 
 | ||||||
| 			err = tests.RunStateTest(testfile) | 		} else { | ||||||
| 		case "tx", "TransactionTests": | 			files, err = getFiles(flagFile) | ||||||
| 			err = tests.RunTransactionTests(testfile) | 		} | ||||||
| 		case "bc", "BlockChainTest": | 		if err != nil { | ||||||
| 			err = tests.RunBlockTest(testfile) | 			glog.Fatalln(err) | ||||||
| 		default: |  | ||||||
| 			glog.Fatalln("Invalid test type specified") |  | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if err != nil { | 		if len(files) == 0 { | ||||||
| 			if continueOnError { | 			glog.Warningln("No files matched path") | ||||||
| 				glog.Errorln(err) | 		} | ||||||
| 			} else { | 		for _, testfile := range files { | ||||||
| 				glog.Fatalln(err) | 			// Skip blank entries
 | ||||||
|  | 			if len(testfile) == 0 { | ||||||
|  | 				continue | ||||||
| 			} | 			} | ||||||
|  | 
 | ||||||
|  | 			// TODO allow io.Reader to be passed so Stdin can be piped
 | ||||||
|  | 			// RunVmTest(strings.NewReader(os.Args[2]))
 | ||||||
|  | 			// RunVmTest(os.Stdin)
 | ||||||
|  | 			err := runTest(curTest, testfile) | ||||||
|  | 			if err != nil { | ||||||
|  | 				if continueOnError { | ||||||
|  | 					glog.Errorln(err) | ||||||
|  | 				} else { | ||||||
|  | 					glog.Fatalln(err) | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func main() { | ||||||
|  | 	glog.SetToStderr(true) | ||||||
|  | 
 | ||||||
|  | 	// vm.Debug = true
 | ||||||
|  | 
 | ||||||
|  | 	app := cli.NewApp() | ||||||
|  | 	app.Name = "ethtest" | ||||||
|  | 	app.Usage = "go-ethereum test interface" | ||||||
|  | 	app.Action = runSuite | ||||||
|  | 	app.Flags = []cli.Flag{ | ||||||
|  | 		TestFlag, | ||||||
|  | 		FileFlag, | ||||||
|  | 		ContinueOnErrorFlag, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if err := app.Run(os.Args); err != nil { | ||||||
|  | 		glog.Fatalln(err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user