diff options
author | obscuren <geffobscura@gmail.com> | 2015-04-30 06:08:43 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2015-04-30 06:14:41 +0800 |
commit | 2590a7dabbf6781734be0c388b46ecd53ece6155 (patch) | |
tree | 1341e4c8117aa1aedf33a6c5777678f958aa3c08 | |
parent | 04c209980bdecb848ae6e397e808e62aecaece39 (diff) | |
download | dexon-2590a7dabbf6781734be0c388b46ecd53ece6155.tar dexon-2590a7dabbf6781734be0c388b46ecd53ece6155.tar.gz dexon-2590a7dabbf6781734be0c388b46ecd53ece6155.tar.bz2 dexon-2590a7dabbf6781734be0c388b46ecd53ece6155.tar.lz dexon-2590a7dabbf6781734be0c388b46ecd53ece6155.tar.xz dexon-2590a7dabbf6781734be0c388b46ecd53ece6155.tar.zst dexon-2590a7dabbf6781734be0c388b46ecd53ece6155.zip |
core: added some additional chain tests for shortest chain
-rw-r--r-- | core/chain_manager.go | 2 | ||||
-rw-r--r-- | core/chain_manager_test.go | 33 |
2 files changed, 30 insertions, 5 deletions
diff --git a/core/chain_manager.go b/core/chain_manager.go index 253228bfd..4fdb2edce 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -593,7 +593,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) { } } else { if glog.V(logger.Detail) { - glog.Infof("inserted forked block #%d (%d TXs %d UNCs) (%x...)\n", block.Number(), len(block.Transactions()), len(block.Uncles()), block.Hash().Bytes()[0:4]) + glog.Infof("inserted forked block #%d (TD=%v) (%d TXs %d UNCs) (%x...)\n", block.Number(), block.Difficulty(), len(block.Transactions()), len(block.Uncles()), block.Hash().Bytes()[0:4]) } queue[i] = ChainSideEvent{block, logs} diff --git a/core/chain_manager_test.go b/core/chain_manager_test.go index 8d1b7865d..50915459b 100644 --- a/core/chain_manager_test.go +++ b/core/chain_manager_test.go @@ -9,6 +9,7 @@ import ( "strconv" "testing" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethdb" @@ -369,11 +370,8 @@ func makeChainWithDiff(genesis *types.Block, d []int, seed byte) []*types.Block return chain } -func TestReorg(t *testing.T) { - db, _ := ethdb.NewMemDatabase() +func chm(genesis *types.Block, db common.Database) *ChainManager { var eventMux event.TypeMux - - genesis := GenesisBlock(db) bc := &ChainManager{blockDb: db, stateDb: db, genesisBlock: genesis, eventMux: &eventMux} bc.cache = NewBlockCache(100) bc.futureBlocks = NewBlockCache(100) @@ -381,6 +379,14 @@ func TestReorg(t *testing.T) { bc.ResetWithGenesisBlock(genesis) bc.txState = state.ManageState(bc.State()) + return bc +} + +func TestReorgLongest(t *testing.T) { + db, _ := ethdb.NewMemDatabase() + genesis := GenesisBlock(db) + bc := chm(genesis, db) + chain1 := makeChainWithDiff(genesis, []int{1, 2, 4}, 10) chain2 := makeChainWithDiff(genesis, []int{1, 2, 3, 4}, 11) @@ -394,3 +400,22 @@ func TestReorg(t *testing.T) { } } } + +func TestReorgShortest(t *testing.T) { + db, _ := ethdb.NewMemDatabase() + genesis := GenesisBlock(db) + bc := chm(genesis, db) + + chain1 := makeChainWithDiff(genesis, []int{1, 2, 3, 4}, 10) + chain2 := makeChainWithDiff(genesis, []int{1, 10}, 11) + + bc.InsertChain(chain1) + bc.InsertChain(chain2) + + prev := bc.CurrentBlock() + for block := bc.GetBlockByNumber(bc.CurrentBlock().NumberU64() - 1); block.NumberU64() != 0; prev, block = block, bc.GetBlockByNumber(block.NumberU64()-1) { + if prev.ParentHash() != block.Hash() { + t.Errorf("parent hash mismatch %x - %x", prev.ParentHash(), block.Hash()) + } + } +} |