|
|
|
@ -29,6 +29,21 @@ func thePow() pow.PoW { |
|
|
|
|
return pow |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func theChainManager(db common.Database, t *testing.T) *ChainManager { |
|
|
|
|
var eventMux event.TypeMux |
|
|
|
|
genesis := GenesisBlock(0, db) |
|
|
|
|
chainMan, err := NewChainManager(genesis, db, db, thePow(), &eventMux) |
|
|
|
|
if err != nil { |
|
|
|
|
t.Error("failed creating chainmanager:", err) |
|
|
|
|
t.FailNow() |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
blockMan := NewBlockProcessor(db, db, nil, chainMan, &eventMux) |
|
|
|
|
chainMan.SetProcessor(blockMan) |
|
|
|
|
|
|
|
|
|
return chainMan |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Test fork of length N starting from block i
|
|
|
|
|
func testFork(t *testing.T, bman *BlockProcessor, i, N int, f func(td1, td2 *big.Int)) { |
|
|
|
|
// switch databases to process the new chain
|
|
|
|
@ -266,10 +281,7 @@ func TestChainInsertions(t *testing.T) { |
|
|
|
|
t.FailNow() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var eventMux event.TypeMux |
|
|
|
|
chainMan := NewChainManager(db, db, thePow(), &eventMux) |
|
|
|
|
blockMan := NewBlockProcessor(db, db, nil, chainMan, &eventMux) |
|
|
|
|
chainMan.SetProcessor(blockMan) |
|
|
|
|
chainMan := theChainManager(db, t) |
|
|
|
|
|
|
|
|
|
const max = 2 |
|
|
|
|
done := make(chan bool, max) |
|
|
|
@ -311,10 +323,9 @@ func TestChainMultipleInsertions(t *testing.T) { |
|
|
|
|
t.FailNow() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
var eventMux event.TypeMux |
|
|
|
|
chainMan := NewChainManager(db, db, thePow(), &eventMux) |
|
|
|
|
blockMan := NewBlockProcessor(db, db, nil, chainMan, &eventMux) |
|
|
|
|
chainMan.SetProcessor(blockMan) |
|
|
|
|
|
|
|
|
|
chainMan := theChainManager(db, t) |
|
|
|
|
|
|
|
|
|
done := make(chan bool, max) |
|
|
|
|
for i, chain := range chains { |
|
|
|
|
// XXX the go routine would otherwise reference the same (chain[3]) variable and fail
|
|
|
|
@ -339,8 +350,7 @@ func TestGetAncestors(t *testing.T) { |
|
|
|
|
t.Skip() // travil fails.
|
|
|
|
|
|
|
|
|
|
db, _ := ethdb.NewMemDatabase() |
|
|
|
|
var eventMux event.TypeMux |
|
|
|
|
chainMan := NewChainManager(db, db, thePow(), &eventMux) |
|
|
|
|
chainMan := theChainManager(db, t) |
|
|
|
|
chain, err := loadChain("valid1", t) |
|
|
|
|
if err != nil { |
|
|
|
|
fmt.Println(err) |
|
|
|
@ -391,7 +401,7 @@ func chm(genesis *types.Block, db common.Database) *ChainManager { |
|
|
|
|
func TestReorgLongest(t *testing.T) { |
|
|
|
|
t.Skip("skipped while cache is removed") |
|
|
|
|
db, _ := ethdb.NewMemDatabase() |
|
|
|
|
genesis := GenesisBlock(db) |
|
|
|
|
genesis := GenesisBlock(0, db) |
|
|
|
|
bc := chm(genesis, db) |
|
|
|
|
|
|
|
|
|
chain1 := makeChainWithDiff(genesis, []int{1, 2, 4}, 10) |
|
|
|
@ -411,7 +421,7 @@ func TestReorgLongest(t *testing.T) { |
|
|
|
|
func TestReorgShortest(t *testing.T) { |
|
|
|
|
t.Skip("skipped while cache is removed") |
|
|
|
|
db, _ := ethdb.NewMemDatabase() |
|
|
|
|
genesis := GenesisBlock(db) |
|
|
|
|
genesis := GenesisBlock(0, db) |
|
|
|
|
bc := chm(genesis, db) |
|
|
|
|
|
|
|
|
|
chain1 := makeChainWithDiff(genesis, []int{1, 2, 3, 4}, 10) |
|
|
|
@ -431,7 +441,7 @@ func TestReorgShortest(t *testing.T) { |
|
|
|
|
func TestInsertNonceError(t *testing.T) { |
|
|
|
|
for i := 1; i < 25 && !t.Failed(); i++ { |
|
|
|
|
db, _ := ethdb.NewMemDatabase() |
|
|
|
|
genesis := GenesisBlock(db) |
|
|
|
|
genesis := GenesisBlock(0, db) |
|
|
|
|
bc := chm(genesis, db) |
|
|
|
|
bc.processor = NewBlockProcessor(db, db, bc.pow, bc, bc.eventMux) |
|
|
|
|
blocks := makeChain(bc.processor.(*BlockProcessor), bc.currentBlock, i, db, 0) |
|
|
|
@ -465,6 +475,21 @@ func TestInsertNonceError(t *testing.T) { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func TestGenesisMismatch(t *testing.T) { |
|
|
|
|
db, _ := ethdb.NewMemDatabase() |
|
|
|
|
var mux event.TypeMux |
|
|
|
|
genesis := GenesisBlock(0, db) |
|
|
|
|
_, err := NewChainManager(genesis, db, db, thePow(), &mux) |
|
|
|
|
if err != nil { |
|
|
|
|
t.Error(err) |
|
|
|
|
} |
|
|
|
|
genesis = GenesisBlock(1, db) |
|
|
|
|
_, err = NewChainManager(genesis, db, db, thePow(), &mux) |
|
|
|
|
if err == nil { |
|
|
|
|
t.Error("expected genesis mismatch error") |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// failpow returns false from Verify for a certain block number.
|
|
|
|
|
type failpow struct{ num uint64 } |
|
|
|
|
|
|
|
|
|