func runBlockTest(ctx *cli.Context) { var ( file, testname string rpc bool ) args := ctx.Args() switch { case len(args) == 1: file = args[0] case len(args) == 2: file, testname = args[0], args[1] case len(args) == 3: file, testname = args[0], args[1] rpc = true default: utils.Fatalf(`Usage: ethereum blocktest <path-to-test-file> [ <test-name> [ "rpc" ] ]`) } bt, err := tests.LoadBlockTests(file) if err != nil { utils.Fatalf("%v", err) } // run all tests if no test name is specified if testname == "" { ecode := 0 for name, test := range bt { fmt.Printf("----------------- Running Block Test %q\n", name) ethereum, err := runOneBlockTest(ctx, test) if err != nil { fmt.Println(err) fmt.Println("FAIL") ecode = 1 } if ethereum != nil { ethereum.Stop() ethereum.WaitForShutdown() } } os.Exit(ecode) return } // otherwise, run the given test test, ok := bt[testname] if !ok { utils.Fatalf("Test file does not contain test named %q", testname) } ethereum, err := runOneBlockTest(ctx, test) if err != nil { utils.Fatalf("%v", err) } defer ethereum.Stop() if rpc { fmt.Println("Block Test post state validated, starting RPC interface.") startEth(ctx, ethereum) utils.StartRPC(ethereum, ctx) ethereum.WaitForShutdown() } }
func main() { flag.Parse() // Enable logging errors, we really do want to see those glog.SetV(2) glog.SetToStderr(true) // Load the test suite to run the RPC against tests, err := tests.LoadBlockTests(*testFile) if err != nil { log.Fatalf("Failed to load test suite: %v", err) } test, found := tests[*testName] if !found { log.Fatalf("Requested test (%s) not found within suite", *testName) } // Create the protocol stack to run the test with keydir, err := ioutil.TempDir("", "") if err != nil { log.Fatalf("Failed to create temporary keystore directory: %v", err) } defer os.RemoveAll(keydir) stack, err := MakeSystemNode(keydir, *testKey, test) if err != nil { log.Fatalf("Failed to assemble test stack: %v", err) } if err := stack.Start(); err != nil { log.Fatalf("Failed to start test node: %v", err) } defer stack.Stop() log.Println("Test node started...") // Make sure the tests contained within the suite pass if err := RunTest(stack, test); err != nil { log.Fatalf("Failed to run the pre-configured test: %v", err) } log.Println("Initial test suite passed...") quit := make(chan os.Signal, 1) signal.Notify(quit, os.Interrupt) <-quit }