github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/cmd/geth/run_test.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 12:09:30</date> 10 //</624342602698723328> 11 12 13 package main 14 15 import ( 16 "fmt" 17 "io/ioutil" 18 "os" 19 "testing" 20 21 "github.com/docker/docker/pkg/reexec" 22 "github.com/ethereum/go-ethereum/internal/cmdtest" 23 ) 24 25 func tmpdir(t *testing.T) string { 26 dir, err := ioutil.TempDir("", "geth-test") 27 if err != nil { 28 t.Fatal(err) 29 } 30 return dir 31 } 32 33 type testgeth struct { 34 *cmdtest.TestCmd 35 36 //Expect的模板变量 37 Datadir string 38 Etherbase string 39 } 40 41 func init() { 42 //运行应用程序,如果我们已经被执行为“Geth测试”在朗格思。 43 reexec.Register("geth-test", func() { 44 if err := app.Run(os.Args); err != nil { 45 fmt.Fprintln(os.Stderr, err) 46 os.Exit(1) 47 } 48 os.Exit(0) 49 }) 50 } 51 52 func TestMain(m *testing.M) { 53 //检查我们是否被重新执行了 54 if reexec.Init() { 55 return 56 } 57 os.Exit(m.Run()) 58 } 59 60 //使用给定的命令行参数生成geth。如果参数未设置--datadir,则 61 //子G获取临时数据目录。 62 func runGeth(t *testing.T, args ...string) *testgeth { 63 tt := &testgeth{} 64 tt.TestCmd = cmdtest.NewTestCmd(t, tt) 65 for i, arg := range args { 66 switch { 67 case arg == "-datadir" || arg == "--datadir": 68 if i < len(args)-1 { 69 tt.Datadir = args[i+1] 70 } 71 case arg == "-etherbase" || arg == "--etherbase": 72 if i < len(args)-1 { 73 tt.Etherbase = args[i+1] 74 } 75 } 76 } 77 if tt.Datadir == "" { 78 tt.Datadir = tmpdir(t) 79 tt.Cleanup = func() { os.RemoveAll(tt.Datadir) } 80 args = append([]string{"-datadir", tt.Datadir}, args...) 81 //如果下面发生故障,请删除临时datadir。 82 defer func() { 83 if t.Failed() { 84 tt.Cleanup() 85 } 86 }() 87 } 88 89 //启动“GETH”。这实际上运行了测试二进制文件,但是testmain 90 //函数将阻止任何测试运行。 91 tt.Run("geth-test", args...) 92 93 return tt 94 } 95