* Added additional chain tests * Added proper mutex' on chain * Removed ethereum dependencies
		
			
				
	
	
		
			78 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package core
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"path"
 | 
						|
	"runtime"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/ethereum/go-ethereum/core/types"
 | 
						|
	"github.com/ethereum/go-ethereum/ethdb"
 | 
						|
	"github.com/ethereum/go-ethereum/ethutil"
 | 
						|
	"github.com/ethereum/go-ethereum/event"
 | 
						|
	//logpkg "github.com/ethereum/go-ethereum/logger"
 | 
						|
)
 | 
						|
 | 
						|
//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))
 | 
						|
	if err != nil {
 | 
						|
		fmt.Println(err)
 | 
						|
		t.FailNow()
 | 
						|
	}
 | 
						|
	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())
 | 
						|
}
 |