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