diff options
-rwxr-xr-x | _data/invalid1 | bin | 0 -> 36072 bytes | |||
-rwxr-xr-x | _data/valid1 (renamed from _data/chain1) | bin | 18036 -> 18036 bytes | |||
-rwxr-xr-x | _data/valid2 (renamed from _data/chain2) | bin | 6125 -> 6125 bytes | |||
-rwxr-xr-x | _data/valid3 | bin | 0 -> 14712 bytes | |||
-rwxr-xr-x | _data/valid4 | bin | 0 -> 12496 bytes | |||
-rw-r--r-- | core/chain_manager_test.go | 53 |
6 files changed, 48 insertions, 5 deletions
diff --git a/_data/invalid1 b/_data/invalid1 Binary files differnew file mode 100755 index 000000000..9c24b13e8 --- /dev/null +++ b/_data/invalid1 diff --git a/_data/chain1 b/_data/valid1 Binary files differindex 809a55f1a..809a55f1a 100755 --- a/_data/chain1 +++ b/_data/valid1 diff --git a/_data/chain2 b/_data/valid2 Binary files differindex 3e9d2971a..3e9d2971a 100755 --- a/_data/chain2 +++ b/_data/valid2 diff --git a/_data/valid3 b/_data/valid3 Binary files differnew file mode 100755 index 000000000..685bc9fd7 --- /dev/null +++ b/_data/valid3 diff --git a/_data/valid4 b/_data/valid4 Binary files differnew file mode 100755 index 000000000..fc016057f --- /dev/null +++ b/_data/valid4 diff --git a/core/chain_manager_test.go b/core/chain_manager_test.go index 6e85bae9a..108718901 100644 --- a/core/chain_manager_test.go +++ b/core/chain_manager_test.go @@ -6,6 +6,7 @@ import ( "path" "reflect" "runtime" + "strconv" "testing" "github.com/ethereum/go-ethereum/core/types" @@ -13,15 +14,15 @@ import ( "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/rlp" - //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) + //Logger = logpkg.NewStdLogSystem(os.Stdout, log.LstdFlags, logpkg.DebugLevel) //logpkg.AddLogSystem(Logger) ethutil.ReadConfig("/tmp/ethtest", "/tmp/ethtest", "ETH") @@ -50,21 +51,22 @@ func loadChain(fn string, t *testing.T) (types.Blocks, error) { func insertChain(done chan bool, chainMan *ChainManager, chain types.Blocks, t *testing.T) { err := chainMan.InsertChain(chain) + done <- true if err != nil { fmt.Println(err) t.FailNow() } - done <- true } func TestChainInsertions(t *testing.T) { - chain1, err := loadChain("chain1", t) + chain1, err := loadChain("valid1", t) if err != nil { fmt.Println(err) t.FailNow() } + fmt.Println(len(chain1)) - chain2, err := loadChain("chain2", t) + chain2, err := loadChain("valid2", t) if err != nil { fmt.Println(err) t.FailNow() @@ -94,3 +96,44 @@ func TestChainInsertions(t *testing.T) { t.Error("chain1 isn't canonical and should be") } } + +func TestChainMultipleInsertions(t *testing.T) { + const max = 4 + chains := make([]types.Blocks, max) + var longest int + for i := 0; i < max; i++ { + var err error + name := "valid" + strconv.Itoa(i+1) + chains[i], err = loadChain(name, t) + if len(chains[i]) >= len(chains[longest]) { + longest = i + } + fmt.Println("loaded", name, "with a length of", len(chains[i])) + if err != nil { + fmt.Println(err) + t.FailNow() + } + } + + var eventMux event.TypeMux + chainMan := NewChainManager(&eventMux) + txPool := NewTxPool(chainMan, &eventMux) + blockMan := NewBlockManager(txPool, chainMan, &eventMux) + chainMan.SetProcessor(blockMan) + done := make(chan bool, max) + for i, chain := range chains { + var i int = i + go func() { + insertChain(done, chainMan, chain, t) + fmt.Println(i, "done") + }() + } + + for i := 0; i < max; i++ { + <-done + } + + if !reflect.DeepEqual(chains[longest][len(chains[longest])-1], chainMan.CurrentBlock()) { + t.Error("Invalid canonical chain") + } +} |