2014-12-04 09:28:02 +00:00
|
|
|
package core
|
2014-12-17 11:57:35 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"path"
|
2014-12-18 12:12:54 +00:00
|
|
|
"runtime"
|
2014-12-17 11:57:35 +00:00
|
|
|
"testing"
|
|
|
|
|
2014-12-18 12:12:54 +00:00
|
|
|
"github.com/ethereum/go-ethereum/core/types"
|
|
|
|
"github.com/ethereum/go-ethereum/ethdb"
|
2014-12-17 11:57:35 +00:00
|
|
|
"github.com/ethereum/go-ethereum/ethutil"
|
2014-12-18 12:12:54 +00:00
|
|
|
"github.com/ethereum/go-ethereum/event"
|
|
|
|
//logpkg "github.com/ethereum/go-ethereum/logger"
|
2014-12-17 11:57:35 +00:00
|
|
|
)
|
|
|
|
|
2014-12-18 12:12:54 +00:00
|
|
|
//var Logger logpkg.LogSystem
|
|
|
|
//var Log = logpkg.NewLogger("TEST")
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
runtime.GOMAXPROCS(runtime.NumCPU())
|
|
|
|
//Logger = logpkg.NewStdLogSystem(os.Stdout, log.LstdFlags, logpkg.InfoLevel)
|
|
|
|
//logpkg.AddLogSystem(Logger)
|
|
|
|
|
|
|
|
ethutil.ReadConfig("/tmp/ethtest", "/tmp/ethtest", "ETH")
|
|
|
|
|
|
|
|
db, err := ethdb.NewMemDatabase()
|
|
|
|
if err != nil {
|
|
|
|
panic("Could not create mem-db, failing")
|
|
|
|
}
|
|
|
|
ethutil.Config.Db = db
|
|
|
|
}
|
|
|
|
|
|
|
|
func loadChain(fn string, t *testing.T) types.Blocks {
|
|
|
|
c1, err := ethutil.ReadAllFile(path.Join("..", "_data", fn))
|
2014-12-17 11:57:35 +00:00
|
|
|
if err != nil {
|
|
|
|
fmt.Println(err)
|
|
|
|
t.FailNow()
|
|
|
|
}
|
2014-12-18 12:12:54 +00:00
|
|
|
value := ethutil.NewValueFromBytes([]byte(c1))
|
|
|
|
blocks := make(types.Blocks, value.Len())
|
|
|
|
it := value.NewIterator()
|
|
|
|
for it.Next() {
|
|
|
|
blocks[it.Idx()] = types.NewBlockFromRlpValue(it.Value())
|
|
|
|
}
|
|
|
|
|
|
|
|
return blocks
|
|
|
|
}
|
|
|
|
|
|
|
|
func insertChain(done chan bool, chainMan *ChainManager, chain types.Blocks, t *testing.T) {
|
|
|
|
err := chainMan.InsertChain(chain)
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println(err)
|
|
|
|
t.FailNow()
|
|
|
|
}
|
|
|
|
done <- true
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestChainInsertions(t *testing.T) {
|
|
|
|
chain1 := loadChain("chain1", t)
|
|
|
|
chain2 := loadChain("chain2", t)
|
|
|
|
var eventMux event.TypeMux
|
|
|
|
chainMan := NewChainManager(&eventMux)
|
|
|
|
txPool := NewTxPool(chainMan, nil, &eventMux)
|
|
|
|
blockMan := NewBlockManager(txPool, chainMan, &eventMux)
|
|
|
|
chainMan.SetProcessor(blockMan)
|
|
|
|
|
|
|
|
const max = 2
|
|
|
|
done := make(chan bool, max)
|
|
|
|
|
|
|
|
go insertChain(done, chainMan, chain1, t)
|
|
|
|
go insertChain(done, chainMan, chain2, t)
|
|
|
|
|
|
|
|
for i := 0; i < max; i++ {
|
|
|
|
<-done
|
|
|
|
}
|
|
|
|
fmt.Println(chainMan.CurrentBlock())
|
2014-12-17 11:57:35 +00:00
|
|
|
}
|