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