// RunTest executes the specified test against an already pre-configured protocol // stack to ensure basic checks pass before running RPC tests. func RunTest(stack *node.Node, test *tests.BlockTest) error { var expanse *exp.Expanse stack.Service(&expanse) blockchain := expanse.BlockChain() // Process the blocks and verify the imported headers blocks, err := test.TryBlocksInsert(blockchain) if err != nil { return err } if err := test.ValidateImportedHeaders(blockchain, blocks); err != nil { return err } // Retrieve the assembled state and validate it stateDb, err := blockchain.State() if err != nil { return err } if err := test.ValidatePostState(stateDb); err != nil { return err } return nil }
func runOneBlockTest(ctx *cli.Context, test *tests.BlockTest) (*exp.Expanse, error) { cfg := utils.MakeEthConfig(ClientIdentifier, Version, ctx) db, _ := ethdb.NewMemDatabase() cfg.NewDB = func(path string) (ethdb.Database, error) { return db, nil } cfg.MaxPeers = 0 // disable network cfg.Shh = false // disable whisper cfg.NAT = nil // disable port mapping expanse, err := exp.New(cfg) if err != nil { return nil, err } // import the genesis block expanse.ResetWithGenesisBlock(test.Genesis) // import pre accounts _, err = test.InsertPreState(db, cfg.AccountManager) if err != nil { return expanse, fmt.Errorf("InsertPreState: %v", err) } cm := expanse.BlockChain() validBlocks, err := test.TryBlocksInsert(cm) if err != nil { return expanse, fmt.Errorf("Block Test load error: %v", err) } newDB, err := cm.State() if err != nil { return expanse, fmt.Errorf("Block Test get state error: %v", err) } if err := test.ValidatePostState(newDB); err != nil { return expanse, fmt.Errorf("post state validation failed: %v", err) } return expanse, test.ValidateImportedHeaders(cm, validBlocks) }