github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/cmd/geth/genesis_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:28</date>
    10  //</624342591441211392>
    11  
    12  
    13  package main
    14  
    15  import (
    16  	"io/ioutil"
    17  	"os"
    18  	"path/filepath"
    19  	"testing"
    20  )
    21  
    22  var customGenesisTests = []struct {
    23  	genesis string
    24  	query   string
    25  	result  string
    26  }{
    27  //纯Genesis文件,无任何额外内容
    28  	{
    29  		genesis: `{
    30  			"alloc"      : {},
    31  			"coinbase"   : "0x0000000000000000000000000000000000000000",
    32  			"difficulty" : "0x20000",
    33  			"extraData"  : "",
    34  			"gasLimit"   : "0x2fefd8",
    35  			"nonce"      : "0x0000000000000042",
    36  			"mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
    37  			"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    38  			"timestamp"  : "0x00"
    39  		}`,
    40  		query:  "eth.getBlock(0).nonce",
    41  		result: "0x0000000000000042",
    42  	},
    43  //具有空链配置的Genesis文件(确保丢失的字段工作)
    44  	{
    45  		genesis: `{
    46  			"alloc"      : {},
    47  			"coinbase"   : "0x0000000000000000000000000000000000000000",
    48  			"difficulty" : "0x20000",
    49  			"extraData"  : "",
    50  			"gasLimit"   : "0x2fefd8",
    51  			"nonce"      : "0x0000000000000042",
    52  			"mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
    53  			"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    54  			"timestamp"  : "0x00",
    55  			"config"     : {}
    56  		}`,
    57  		query:  "eth.getBlock(0).nonce",
    58  		result: "0x0000000000000042",
    59  	},
    60  //具有特定链配置的Genesis文件
    61  	{
    62  		genesis: `{
    63  			"alloc"      : {},
    64  			"coinbase"   : "0x0000000000000000000000000000000000000000",
    65  			"difficulty" : "0x20000",
    66  			"extraData"  : "",
    67  			"gasLimit"   : "0x2fefd8",
    68  			"nonce"      : "0x0000000000000042",
    69  			"mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
    70  			"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    71  			"timestamp"  : "0x00",
    72  			"config"     : {
    73  				"homesteadBlock" : 314,
    74  				"daoForkBlock"   : 141,
    75  				"daoForkSupport" : true
    76  			}
    77  		}`,
    78  		query:  "eth.getBlock(0).nonce",
    79  		result: "0x0000000000000042",
    80  	},
    81  }
    82  
    83  //使用自定义Genesis块和链定义初始化geth的测试
    84  //工作正常。
    85  func TestCustomGenesis(t *testing.T) {
    86  	for i, tt := range customGenesisTests {
    87  //创建临时数据目录以供以后使用和检查
    88  		datadir := tmpdir(t)
    89  		defer os.RemoveAll(datadir)
    90  
    91  //使用自定义Genesis块初始化数据目录
    92  		json := filepath.Join(datadir, "genesis.json")
    93  		if err := ioutil.WriteFile(json, []byte(tt.genesis), 0600); err != nil {
    94  			t.Fatalf("test %d: failed to write genesis file: %v", i, err)
    95  		}
    96  		runGeth(t, "--datadir", datadir, "init", json).WaitExit()
    97  
    98  //查询自定义Genesis块
    99  		geth := runGeth(t,
   100  			"--datadir", datadir, "--maxpeers", "0", "--port", "0",
   101  			"--nodiscover", "--nat", "none", "--ipcdisable",
   102  			"--exec", tt.query, "console")
   103  		geth.ExpectRegexp(tt.result)
   104  		geth.ExpectExit()
   105  	}
   106  }
   107