diff options
Diffstat (limited to 'light')
-rw-r--r-- | light/lightchain.go | 6 | ||||
-rw-r--r-- | light/lightchain_test.go | 81 | ||||
-rw-r--r-- | light/odr_test.go | 5 | ||||
-rw-r--r-- | light/txpool_test.go | 5 |
4 files changed, 33 insertions, 64 deletions
diff --git a/light/lightchain.go b/light/lightchain.go index 82b7a5866..98fb024f0 100644 --- a/light/lightchain.go +++ b/light/lightchain.go @@ -96,11 +96,7 @@ func NewLightChain(odr OdrBackend, config *params.ChainConfig, pow pow.PoW, mux bc.genesisBlock, _ = bc.GetBlockByNumber(NoOdr, 0) if bc.genesisBlock == nil { - bc.genesisBlock, err = core.WriteDefaultGenesisBlock(odr.Database()) - if err != nil { - return nil, err - } - log.Warn("Wrote default ethereum genesis block") + return nil, core.ErrNoGenesis } if bc.genesisBlock.Hash() == params.MainNetGenesisHash { diff --git a/light/lightchain_test.go b/light/lightchain_test.go index 7460fd1a3..e9236f1fd 100644 --- a/light/lightchain_test.go +++ b/light/lightchain_test.go @@ -20,7 +20,6 @@ import ( "context" "fmt" "math/big" - "runtime" "testing" "github.com/ethereum/go-ethereum/common" @@ -30,7 +29,6 @@ import ( "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/pow" - "github.com/hashicorp/golang-lru" ) // So we can deterministically seed different blockchains @@ -59,14 +57,10 @@ func testChainConfig() *params.ChainConfig { // chain. Depending on the full flag, if creates either a full block chain or a // header only chain. func newCanonical(n int) (ethdb.Database, *LightChain, error) { - // Create te new chain database db, _ := ethdb.NewMemDatabase() - evmux := &event.TypeMux{} - - // Initialize a fresh chain with only a genesis block - genesis, _ := core.WriteTestNetGenesisBlock(db) - - blockchain, _ := NewLightChain(&dummyOdr{db: db}, testChainConfig(), pow.FakePow{}, evmux) + gspec := core.Genesis{Config: testChainConfig()} + genesis := gspec.MustCommit(db) + blockchain, _ := NewLightChain(&dummyOdr{db: db}, gspec.Config, pow.FakePow{}, new(event.TypeMux)) // Create and inject the requested chain if n == 0 { return db, blockchain, nil @@ -77,21 +71,20 @@ func newCanonical(n int) (ethdb.Database, *LightChain, error) { return db, blockchain, err } -func init() { - runtime.GOMAXPROCS(runtime.NumCPU()) -} - -func theLightChain(db ethdb.Database, t *testing.T) *LightChain { - var eventMux event.TypeMux - core.WriteTestNetGenesisBlock(db) - LightChain, err := NewLightChain(&dummyOdr{db: db}, testChainConfig(), pow.NewTestEthash(), &eventMux) +// newTestLightChain creates a LightChain that doesn't validate anything. +func newTestLightChain() *LightChain { + db, _ := ethdb.NewMemDatabase() + gspec := &core.Genesis{ + Difficulty: big.NewInt(1), + Config: testChainConfig(), + } + gspec.MustCommit(db) + lc, err := NewLightChain(&dummyOdr{db: db}, gspec.Config, pow.NewTestEthash(), new(event.TypeMux)) if err != nil { - t.Error("failed creating LightChain:", err) - t.FailNow() - return nil + panic(err) } - - return LightChain + lc.SetValidator(bproc{}) + return lc } // Test fork of length N starting from block i @@ -302,20 +295,6 @@ func (odr *dummyOdr) Retrieve(ctx context.Context, req OdrRequest) error { return nil } -func chm(genesis *types.Block, db ethdb.Database) *LightChain { - odr := &dummyOdr{db: db} - var eventMux event.TypeMux - bc := &LightChain{odr: odr, chainDb: db, genesisBlock: genesis, eventMux: &eventMux, pow: pow.FakePow{}} - bc.hc, _ = core.NewHeaderChain(db, testChainConfig(), bc.Validator, bc.getProcInterrupt) - bc.bodyCache, _ = lru.New(100) - bc.bodyRLPCache, _ = lru.New(100) - bc.blockCache, _ = lru.New(100) - bc.SetValidator(bproc{}) - bc.ResetWithGenesisBlock(genesis) - - return bc -} - // Tests that reorganizing a long difficult chain after a short easy one // overwrites the canonical numbers and links in the database. func TestReorgLongHeaders(t *testing.T) { @@ -329,14 +308,11 @@ func TestReorgShortHeaders(t *testing.T) { } func testReorg(t *testing.T, first, second []int, td int64) { - // Create a pristine block chain - db, _ := ethdb.NewMemDatabase() - genesis, _ := core.WriteTestNetGenesisBlock(db) - bc := chm(genesis, db) + bc := newTestLightChain() // Insert an easy and a difficult chain afterwards - bc.InsertHeaderChain(makeHeaderChainWithDiff(genesis, first, 11), 1) - bc.InsertHeaderChain(makeHeaderChainWithDiff(genesis, second, 22), 1) + bc.InsertHeaderChain(makeHeaderChainWithDiff(bc.genesisBlock, first, 11), 1) + bc.InsertHeaderChain(makeHeaderChainWithDiff(bc.genesisBlock, second, 22), 1) // Check that the chain is valid number and link wise prev := bc.CurrentHeader() for header := bc.GetHeaderByNumber(bc.CurrentHeader().Number.Uint64() - 1); header.Number.Uint64() != 0; prev, header = header, bc.GetHeaderByNumber(header.Number.Uint64()-1) { @@ -345,7 +321,7 @@ func testReorg(t *testing.T, first, second []int, td int64) { } } // Make sure the chain total difficulty is the correct one - want := new(big.Int).Add(genesis.Difficulty(), big.NewInt(td)) + want := new(big.Int).Add(bc.genesisBlock.Difficulty(), big.NewInt(td)) if have := bc.GetTdByHash(bc.CurrentHeader().Hash()); have.Cmp(want) != 0 { t.Errorf("total difficulty mismatch: have %v, want %v", have, want) } @@ -353,14 +329,11 @@ func testReorg(t *testing.T, first, second []int, td int64) { // Tests that the insertion functions detect banned hashes. func TestBadHeaderHashes(t *testing.T) { - // Create a pristine block chain - db, _ := ethdb.NewMemDatabase() - genesis, _ := core.WriteTestNetGenesisBlock(db) - bc := chm(genesis, db) + bc := newTestLightChain() // Create a chain, ban a hash and try to import var err error - headers := makeHeaderChainWithDiff(genesis, []int{1, 2, 4}, 10) + headers := makeHeaderChainWithDiff(bc.genesisBlock, []int{1, 2, 4}, 10) core.BadHashes[headers[2].Hash()] = true _, err = bc.InsertHeaderChain(headers, 1) if !core.IsBadHashError(err) { @@ -371,13 +344,10 @@ func TestBadHeaderHashes(t *testing.T) { // Tests that bad hashes are detected on boot, and the chan rolled back to a // good state prior to the bad hash. func TestReorgBadHeaderHashes(t *testing.T) { - // Create a pristine block chain - db, _ := ethdb.NewMemDatabase() - genesis, _ := core.WriteTestNetGenesisBlock(db) - bc := chm(genesis, db) + bc := newTestLightChain() // Create a chain, import and ban aferwards - headers := makeHeaderChainWithDiff(genesis, []int{1, 2, 3, 4}, 10) + headers := makeHeaderChainWithDiff(bc.genesisBlock, []int{1, 2, 3, 4}, 10) if _, err := bc.InsertHeaderChain(headers, 1); err != nil { t.Fatalf("failed to import headers: %v", err) @@ -387,8 +357,9 @@ func TestReorgBadHeaderHashes(t *testing.T) { } core.BadHashes[headers[3].Hash()] = true defer func() { delete(core.BadHashes, headers[3].Hash()) }() - // Create a new chain manager and check it rolled back the state - ncm, err := NewLightChain(&dummyOdr{db: db}, testChainConfig(), pow.FakePow{}, new(event.TypeMux)) + + // Create a new LightChain and check that it rolled back the state. + ncm, err := NewLightChain(&dummyOdr{db: bc.chainDb}, testChainConfig(), pow.FakePow{}, new(event.TypeMux)) if err != nil { t.Fatalf("failed to create new chain manager: %v", err) } diff --git a/light/odr_test.go b/light/odr_test.go index ba82ec04f..37d999994 100644 --- a/light/odr_test.go +++ b/light/odr_test.go @@ -251,9 +251,10 @@ func testChainOdr(t *testing.T, protocol int, expFail uint64, fn odrTestFn) { pow = new(pow.FakePow) sdb, _ = ethdb.NewMemDatabase() ldb, _ = ethdb.NewMemDatabase() - genesis = core.WriteGenesisBlockForTesting(sdb, core.GenesisAccount{Address: testBankAddress, Balance: testBankFunds}) + gspec = core.Genesis{Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}} + genesis = gspec.MustCommit(sdb) ) - core.WriteGenesisBlockForTesting(ldb, core.GenesisAccount{Address: testBankAddress, Balance: testBankFunds}) + gspec.MustCommit(ldb) // Assemble the test environment blockchain, _ := core.NewBlockChain(sdb, testChainConfig(), pow, evmux, vm.Config{}) chainConfig := ¶ms.ChainConfig{HomesteadBlock: new(big.Int)} diff --git a/light/txpool_test.go b/light/txpool_test.go index e93955511..2b5fa7116 100644 --- a/light/txpool_test.go +++ b/light/txpool_test.go @@ -86,9 +86,10 @@ func TestTxPool(t *testing.T) { pow = new(pow.FakePow) sdb, _ = ethdb.NewMemDatabase() ldb, _ = ethdb.NewMemDatabase() - genesis = core.WriteGenesisBlockForTesting(sdb, core.GenesisAccount{Address: testBankAddress, Balance: testBankFunds}) + gspec = core.Genesis{Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}} + genesis = gspec.MustCommit(sdb) ) - core.WriteGenesisBlockForTesting(ldb, core.GenesisAccount{Address: testBankAddress, Balance: testBankFunds}) + gspec.MustCommit(ldb) // Assemble the test environment blockchain, _ := core.NewBlockChain(sdb, testChainConfig(), pow, evmux, vm.Config{}) chainConfig := ¶ms.ChainConfig{HomesteadBlock: new(big.Int)} |