@ -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 }